2016-10-19 14 views
0

問題があります。私はPHPを使用してキー値ごとにJSONから要素を削除する必要がありますが、いくつかの問題があります。私は以下のコードを説明しています。PHPを使用して要素fron 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); 
?> 

ここで、複数の要素のキー値が空白の場合、そのキーは機能しません。 1つのケースがあればそれを動作させる。ここで私の必要性は、要素day_id and commentのいずれかが空白の場合、それらの要素はそのjsonオブジェクトから削除され、再び索引付けされます。私を助けてください。

+0

それは**、それはPHPの配列JSONだではありません。 –

+1

@Rax Weber彼はより良い質問のためにそれをエンコードしてデコードします。 –

答えて

3

unset($arrComment[$i]);すると、配列の長さが短くなります。したがって、count($arrComment)はではなく、ではありません。そのため、最後の要素はで、に達していません。これを避けるために - ループの開始前に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);