我有一个问题。我需要使用PHP按照键值从JSON中删除元素,但它有一些问题。我在下面解释我的代码。
<?php
$comment = json_encode(array(array('day_id' => '', 'comment' => ''),array('day_id' => '2', 'comment' => 'hello'), array('day_id' => '3', 'comment' => 'vodka3'),array('day_id'=>'','comment'=>'')));
$arrComment = json_decode($comment, true);
$imgarr=array();
for($i=0;$i<count($arrComment);$i++){
if($arrComment[$i]['day_id']=='' && $arrComment[$i]['comment']==''){
unset($arrComment[$i]);
}
}
$arrComment=array_values($arrComment);
print_r($arrComment);
?>
这里当我的多元素键值为空时它不起作用。如果一个案例正常工作,请坚持下去。这里我需要的是,如果元素day_id and comment
中的任何一个是空白的,那么该元素将从该json对象中删除,并且它将再次重新索引。请帮帮我。
答案 0 :(得分:2)
执行unset($arrComment[$i]);
数组后,长度减少。因此,count($arrComment)
不是 4 ,而是 3 。这就是为什么你的最后一个元素未达到。为避免这种情况 - 在开始循环之前使用count()
:
$cou = count($arrComment);
for($i=0; $i<$cou; $i++){
if($arrComment[$i]['day_id']=='' && $arrComment[$i]['comment']==''){
unset($arrComment[$i]);
}
}
或者使用例如array_filter
:
$arrComment = array_filter(
$arrComment,
function($v) { return $v['day_id']!='' && $v['comment']!=''; }
);
print_r($arrComment);