json храним не более 5 записей

Dima85

Новичок
Этот код, открывает json файл, добавляет туда новую информацию и записывает ее.
Мне необходимо сюда внедрить условие, если в нем уже есть 5 записей, старую нужно стереть и добавить новую. Я это пытаюсь сделать через while(count($json) > 5) array_shift($json);
Но он не слушает и добавляет новые данные. Что я делаю не так?

PHP:
    $json_string = file_get_contents($file);
    $json = json_decode($json_string, true);

    while(count($json[0]["items"]) > 5) array_shift($json);

    array_push($json[0]["items"], array("name" => "itedddm3", "type" => "typddde3"));
    file_put_contents($file, json_encode($json));
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Условие неправильно ставишь. Как в том анекдоте - нормальный человек использует союз "и" для объединения признаков, а программист пишет "or" для разъединения.
У тебя после цикла получается не более пяти записей в массиве, а должно быть не более четырёх, так как ты сейчас добавишь пятую новую.
 

Dima85

Новичок
Да, но это не решает проблему, после пятни у меня файл содержит такой текст:

[{"items":null}]


Насколько я понял нужно удалять через
unset

Вот так:
PHP:
if (count($json[0]["items"]) > 5) {
  unset($json[0]["items"][0]);
}
В таком случае он удаляет, но только 1 раз, а потом не может найти нулевую запись.
 
Последнее редактирование:

Вурдалак

Продвинутый новичок
+ желательно array_values() в конце, иначе будет JSON-объект вместо JSON-массива.
 

AnrDaemon

Продвинутый новичок
Да, но это не решает проблему, после пятни у меня файл содержит такой текст:

[{"items":null}]


Насколько я понял нужно удалять через
unset

Вот так:
PHP:
if (count($json[0]["items"]) > 5) {
  unset($json[0]["items"][0]);
}
В таком случае он удаляет, но только 1 раз, а потом не может найти нулевую запись.
Нет, как раз первый вариант был верный, за исключением того, что аншифтить надо то же, что проверяется.
PHP:
if (count($json[0]["items"]) > 4) {
  array_unshift($json[0]["items"]);
}
 
Сверху