php - 从json对象中按值删除[关闭]

Posted

技术标签:

【中文标题】php - 从json对象中按值删除[关闭]【英文标题】:php - delete by value from json object [closed] 【发布时间】:2017-06-01 23:15:44 【问题描述】:

我有一个包含以下数据的 JSON 文件:


    "0": 
        "name": "Test1",
        "devices": [
          
              "name": "Test1",
              "code": "654345",
              "state": "on"
          ,
          
              "name": "Test2",
              "code": "876543",
              "state": "off"
          ,
          
              "name": "Test3",
              "code": "44444",
              "state": "off"
          
        ]
     ,
     "1": 
         "name": "Test2",
         "devices": [
           
              "name": "Test4",
              "code": "987654",
              "state": "on"
           
         ]
     

现在我想取消设置其中一个设备。我用下面的 php 代码试过了,但不知道为什么它不起作用:

$file = '../data/data.json';
$json_data = file_get_contents($file);
$json = json_decode($json_data);

foreach ($json as $key => $value) 
    foreach ($value->devices as $k => $v) 
        if ($v->name == $_POST["name"]) 
            unset($json[$key]);
        
    


file_put_contents($file, json_encode($json));

提前感谢您的帮助!

【问题讨论】:

您要取消设置哪个键? $_POST['name'] 的值是多少? $_POST['name'] 是设备的名称。 【参考方案1】:

你应该

unset($json->$key->devices[$k]);

首先 foreach 是因为你有多个对象,然后你去 currnet 对象中的每个设备并搜索它们是否具有指定的名称。 所以你搜索一个值并按键删除。

【讨论】:

以上是关于php - 从json对象中按值删除[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在PHP中按值对对象数组进行排序

在python中按值删除字典项的最佳方法是啥? [复制]

如何使用 Hive 在 Dart 中按值(而不是按索引)读取/更新/删除?

为啥要在 C++ 中按值传递对象 [重复]

如何在 C# 中按值获取枚举对象?

csharp 在C#中按值比较两个对象