Удалить из JSON с переполнением стека

Я пытаюсь удалить элемент из файла 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/"}
]
},

0

Решение

Внутри цикла 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');
}
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]