我有一个数组,其中有几行包含这些值(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
}
}
我设法通过创建第二个数组并将好的行复制到内部,然后替换第一个数组来使其工作。但是可能有更好的解决方案,不是吗?
答案 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)“”}}}}