JSON 解码和编码 - 遍历多维数组,如果等于某个值,则删除键值


json decode and encode - iterate through multi dimensional array and remove key value if equals certain value

基本上json输出是这个 - 输出来自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]);

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

你可以

使用 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

在大多数语言中,在循环时改变数组是不受欢迎的。在 PHP 中,没有什么说你不能在循环数组时改变数组。你正在做的事情绝对没问题,可能是最有效的方法。

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