使用 PHP 从 JSON 中删除

Delete from JSON with PHP

我正在尝试使用项目 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');
        }
    }
}

我使用的 REST 客户端给出了 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/"
        }
      ]
    },

在 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');
        }
    }
}