Во-первых, не помещайте sh данные $_POST
в отдельный подмассив. Уже в правильной структуре вызывать array_unshift()
непосредственно на нем. Другими словами, вам не нужно индексировать его - unshift будет применять для вас клавишу 0
.
Код: ( Демо )
$fileContents = '[{"name":"B1","author":"B2","category":"B3","url":"B4"},{"name":"A1","author":"A2","category":"A3","url":"A4"}]';
$array = json_decode($fileContents, true);
$_POST = [
'name' => 'C1',
'author' => 'C2',
'category' => 'C3',
'url' => 'C4',
];
array_unshift($array, $_POST);
echo json_encode($array);
Вывод:
[{"name":"C1","author":"C2","category":"C3","url":"C4"},{"name":"B1","author":"B2","category":"B3","url":"B4"},{"name":"A1","author":"A2","category":"A3","url":"A4"}]
Во-вторых, я не поддерживаю идею создания этого файла json, если есть способ избежать этого. Я имею в виду, что с увеличением размера файла вашему серверу придется работать все больше и больше, чтобы анализировать json, манипулировать им, перекодировать каждый раз, когда вы хотите внести изменение.
Я мог бы порекомендовать вам реструктурировать ваш файл так, чтобы он представлял собой текстовый файл, представляющий собой набор json строк, каждая из которых написана отдельно в каждой строке. Таким образом, вам не нужно каждый раз распаковывать и перепаковывать данные, вы просто добавляете новую строку json к файлу и уходите. * Предостережение, это не удастся, если данные, которые вы храните, содержат символы новой строки - я не знаю, может ли ваш проект получить такие данные.
ps Если вы не разработчик ультра-пуристов и ваши входные данные так же ручны, как и вы видите, вы можете взломать строку json и уменьшить нагрузку следующим образом:
Код: ( Demo )
$newJson = json_encode($_POST);
if ($fileContents) {
$fileContents = substr_replace($fileContents, $newJson . ',', 1, 0);
} else {
$fileContent = '[' . $newJson . ']';
}
echo $fileContents;