-1

我有一个包含这些值(id、date、latlng、transport)的多行数组。当transport =“”时,我想删除整行。

我尝试了 while、for 和 foreach,但问题是:当我发现要删除的条目超过 1 个时,“$i”不再与相应的行匹配。

for($i=0;$i<count($json_a[data][entrees]);$i++)
{
    if($json_a[data][entrees][$i][transport]!="")
    {
        array_splice($json_a[data][entrees],$i,1);
        //first removal is OK. Second won't scope the good row
    }
}

我设法通过创建第二个数组并复制其中的好行,然后替换第一个数组来使其工作。但可能有更好的解决方案,不是吗?

4

4 回答 4

1

foreach 循环中没有 $i 。

foreach($json_a['data']['entrees'] as $entryKey => $entry){
    if($entry['transport']!=""){
        unset($json_a['data']['entrees'][$entryKey]);
    }
}
于 2012-06-14T11:32:53.083 回答
0
    for($i=0;$i<count($json_a[data][entrees]);$i++)
    {
        if($json_a[data][entrees][$i][transport]=="")
        {
            unset($json_a[data][entrees][$i]);
        }
    }

print_r($json_a[data][entrees])

Hope this helps!

于 2012-06-14T11:23:52.147 回答
0

尝试这个:

foreach( $json_a['data']['entrees'] as $key => $entry ){
    if( $entry['transport'] != "" ){
        array_splice($json_a['data']['entrees'], $key, 1);
    }else{
        unset($json_a['data']['entrees'][$key]);
    }
}
于 2012-06-14T11:28:31.867 回答
0

您正在使用PHP array_splice,它的内容如下:

删除数组的一部分并用其他东西替换它

要从数组中删除一个条目,您应该使用PHP unset它读取的位置:

取消设置给定的变量。

所以,你的代码应该是:

<?php
for($i=0;$i<count($json_a[data][entrees]);$i++)
{
    if($json_a[data][entrees][$i][transport]!="")
    {
        //remove this entry from the array
        unset($json_a[data][entrees][$i]);
    }
}
?>

测试用例:

// Sample Array with 4 entries
$json_a = array(
    "data" => array (
        "entrees" => array(
            array (
                "id"        => 14,
                "date"      => '2012-06-14',
                "latlng"    => '14.000000, -9.00000',
                "transport" => ''
            ),
            array(
                "id"        => 13,
                "date"      => '2012-06-14',
                "latlng"    => '13.000000, -8.00000',
                "transport" => '12'
            ),
            array(
                "id"        => 12,
                "date"      => '2012-06-14',
                "latlng"    => '12.000000, -7.00000',
                "transport" => '45'
            ),
            array(
                "id"        => 11,
                "date"      => '2012-06-14',
                "latlng"    => '11.000000, -6.00000',
                "transport" => ''
            )
        )
    )
);

控制输出:

var_dump($json_a);

输出:

数组(1){[“数据”]=>数组(1){[“主菜”]=>数组(4){[0]=>数组(4){[“id”]=>int(14) ["日期"]=> 字符串(10) "2012-06-14" ["latlng"]=> 字符串(19) "14.000000, -9.00000" ["运输"]=> 字符串(0) "" } 1 => array(4) { ["id"]=> int(13) ["date"]=> string(10) "2012-06-14" ["latlng"]=> string(19) "13.000000, -8.00000" ["transport"]=> string(2) "12" } 2 => array(4) { ["id"]=> int(12) ["date"]=> string(10) "2012 -06-14" ["latlng"]=> 字符串(19) "12.000000, -7.00000" ["transport"]=> 字符串(2) "45" } [3]=> 数组(4) { ["id"]=> int(11) ["date"]=> string(10) "2012-06-14" ["latlng"]=> string(19) "11.000000, -6.00000" ["transport"]= > 字符串(0) "" } } } }

运行循环:

for($i=0;$i<count($json_a[data][entrees]);$i++)
{
    if($json_a[data][entrees][$i][transport]!="")
    {
        //remove this entry from the array
        unset($json_a[data][entrees][$i]);
    }
}

确认输出:

var_dump($json_a);

输出:

数组(1){[“数据”]=>数组(1){[“主菜”]=>数组(2){[0]=>数组(4){[“id”]=>int(14) [“日期”]=>字符串(10)“2012-06-14”[“latlng”]=>字符串(19)“14.000000,-9.00000”[“运输”]=>字符串(0)“”}[ 3]=> array(4) { ["id"]=> int(11) ["date"]=> string(10) "2012-06-14" ["latlng"]=> string(19) " 11.000000, -6.00000" ["transport"]=> string(0) "" } } } }

于 2012-06-14T11:45:46.670 回答