使用 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 theforeach
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 “x”:“y”到x:y的双引号[关闭]