删除条目等于空字符串的每一行

时间:2012-06-14 11:20:23

标签: php arrays

我有一个数组,其中有几行包含这些值(id,date,latlng,transport)。我想在transport =“”时删除整行。

我尝试了,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 个答案:

答案 0 :(得分:1)

在foreach循环中没有$ i。

foreach($json_a['data']['entrees'] as $entryKey => $entry){
    if($entry['transport']!=""){
        unset($json_a['data']['entrees'][$entryKey]);
    }
}

答案 1 :(得分: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])

希望这有帮助!

答案 2 :(得分: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]);
    }
}

答案 3 :(得分: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);
  

<强>输出:

     

array(1){[“data”] =&gt; array(1){[“entrees”] =&gt; array(4){[0] =&gt; array(4){[“id”] =&gt; int(14)[“date”] =&gt; string(10)“2012-06-14”[“latlng”] =&gt; string(19)“14.000000,-9.00000”[“transport”] =&gt; string(0)“”} 1 =&gt; array(4){[“id”] =&gt; int(13)[“date”] =&gt; string(10)“2012-06-14”[“latlng”] =&gt; string(19)“13.000000,-8.00000”[“transport”] =&gt; string(2)“12”} 2 =&gt; array(4){[“id”] =&gt; int(12)[“date”] =&gt; string(10)“2012-06-14”[“latlng”] =&gt; string(19)“12.000000,-7.00000”[“transport”] =&gt; string(2)“45”} [3] =&gt; array(4){[“id”] =&gt; int(11)[“date”] =&gt; string(10)“2012-06-14”[“latlng”] =&gt; string(19)“11.000000,-6.00000”[“transport”] =&gt; string(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);
  

<强>输出:

     

array(1){[“data”] =&gt; array(1){[“entrees”] =&gt; array(2){[0] =&gt; array(4){[“id”] =&gt; int(14)[“date”] =&gt; string(10)“2012-06-14”[“latlng”] =&gt; string(19)“14.000000,-9.00000”[“transport”] =&gt; string(0)“”} [3] =&gt; array(4){[“id”] =&gt; int(11)[“date”] =&gt; string(10)“2012-06-14”[“latlng”] =&gt; string(19)“11.000000,-6.00000”[“transport”] =&gt; string(0)“”}}}}