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