Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php json解码和编码-迭代多维数组,如果等于某个值,则删除键值_Php_Jquery_Json - Fatal编程技术网

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

Php json解码和编码-迭代多维数组,如果等于某个值,则删除键值,php,jquery,json,Php,Jquery,Json,基本上json输出是this-输出来自php [{"attr":{"id":"node_2","rel":"default"},"data":"C:","state":"closed"},{"attr":{"id":"node_3","rel":"drive"},"data":"D:","state":"closed"}] 因为rel等于default {"attr":{"id":"node_2","rel":"default"},"data":"C:","state":"closed"}

基本上json输出是this-输出来自php

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

{"attr":{"id":"node_2","rel":"default"},"data":"C:","state":"closed"}
我需要将其从阵列中删除

我已经考虑过使用

foreach($arr as $key => &$item) {
    if ($value['rel'] == 'default'{
        unset($arr[$key]);
然而,由于某些原因,这是行不通的。我不知道我的方法是否是最好的方法,或者是否有更好的方法来实现这一点。
我还需要对它进行解码和编码。

在大多数语言中,在循环数组时对其进行变异是不可取的。在PHP中,没有任何东西可以说明在循环数组时不能对其进行变异。你所做的是绝对好的,而且可能是最有效的方式


至于编码和解码,请参见
json\u-encode
json\u-decode
您可以使用json\u-encode和json\u-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

很抱歉,忘了提到这不起作用。我缺少一些简单的东西。如果将
TRUE
作为第二个参数传递给
json\u decode
,它将以数组而不是
StdClass
类型的对象返回。非常感谢Pilatus。我相信这已经奏效了。现在有没有一种简单的方法来重新编码呢。非常非常感谢。