使用 PHP 从 JSON 中删除

Posted

技术标签:

【中文标题】使用 PHP 从 JSON 中删除【英文标题】:Delete from JSON with PHP 【发布时间】:2015-03-16 19:32:55 【问题描述】:

我正在尝试使用项目的 ID 从 JSON 文件中删除项目。 这是我用来执行此操作的代码。

 if($id)
    header('Content-Type: application/json');
    $id = $_GET['id'];
    $file = file_get_contents("data.json");
    $json = json_decode($file);


    foreach ($json->items as $item) 
        if ($item->id == $id) 
                        unset($item);
                        file_put_contents('data.json', json_encode($json));
                        header('HTTP/1.1 204 No Content');
        
    

我使用的 RESTclient 提供了 204,但是当我查看我的 JSON 文件时,该项目仍然存在。

知道我做错了什么吗?

编辑

JSON 看起来像这样


  "items": [
    
      "id": 1,
      "title": "title",
      "artist": "artist",
      "genre": "genre",
      "links": [
        
          "rel": "self",
          "href": "link/webservice/music/1"
        ,
        
          "rel": "collection",
          "href": "link/webservice/"
        
      ]
    ,

【问题讨论】:

看看first example in the foreach docs 您需要通过引用&$item 将其引用为foreach ($json->items as &$item) 才能对其进行修改。 【参考方案1】:

在 foreach 循环中,您获得的数组元素的副本在某些方面不会影响原始数组。

您需要使用原始数组取消引用数组项或通过引用将其传递给循环。

我猜以下应该可行:

if($id)
    header('Content-Type: application/json');
    $id = $_GET['id'];
    $file = file_get_contents("data.json");
    $json = json_decode($file);


    foreach ($json->items as $key => $item) 
        if ($item->id == $id) 
                        unset($json->items[$key]);
                        file_put_contents('data.json', json_encode($json));
                        header('HTTP/1.1 204 No Content');
        
    

【讨论】:

像魅力一样工作!非常感谢

以上是关于使用 PHP 从 JSON 中删除的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 字符串中删除所有不必要的空格(在 PHP 中)

如何从 php 中的 JSON 对象数组中删除值?

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

如何在php中删除从json “x”:“y”到x:y的双引号[关闭]

如何使用 PHP Composer 从 Laravel 中删除一个包?

如何从 CURL 响应 PHP API 的 JSON 字符串中删除引号、不需要的数据