Я пытаюсь удалить элемент из файла 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/"}
]
},
Внутри цикла 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');
}
}
}
Других решений пока нет …