json解码和编码 - 迭代通过多维数组并删除键值,如果等于某个值

时间:2012-07-06 23:12:24

标签: php jquery json

基本上json输出是-output来自php。

[{"attr":{"id":"node_2","rel":"default"},"data":"C:","state":"closed"},{"attr":{"id":"node_3","rel":"drive"},"data":"D:","state":"closed"}]

因为rel等于默认值

{"attr":{"id":"node_2","rel":"default"},"data":"C:","state":"closed"}

我需要从数组中删除它。

我想过可能正在使用

foreach($arr as $key => &$item) {
    if ($value['rel'] == 'default'{
        unset($arr[$key]);

然而,由于某种原因,这不会起作用。我不知道我的方法是否是最好的方法,或者是否有更好的方法来实现这一目标。 我还需要对其进行解码和编码。

2 个答案:

答案 0 :(得分:2)

你可以使用json_encode和json_decode解析json,就像Jesse Bunch所说的那样。

我解码了你发布的json后,它作为一个对象返回。要调用一个对象,你必须做一些不同的事情。

$arr = json_decode('[{"attr":{"id":"node_2","rel":"default"},"data":"C:","state":"closed"},{"attr":{"id":"node_3","rel":"drive"},"data":"D:","state":"closed"}]');

foreach($arr as $key => $row)
{
    if ($row->attr->rel == 'default'){
        unset($arr[$key]);
    }
}

var_dump($arr);

$ arr不再包含默认的rel

答案 1 :(得分:0)

在大多数语言中,在您循环播放数组时改变数组是不受欢迎的。在PHP中,没有任何东西可以说你在循环时不能改变数组。你正在做的事情绝对没问题,也许是最有效的方式。

关于编码和解码,请参阅json_encodejson_decode