Я пытался сделать это некоторое время и просто не могу понять, как это правильно. Один пост очень близко подошел ко мне, но не совсем, потому что моя иерархия в JSON.(это назначение, и эта иерархия обязательна.)
Что я сейчас делаю, это отправляю информацию с одной страницы, размещаю ее на моем php на другой странице, сохраняю в массиве, json_encode для этого массива и пишуэто в мой файл JSON.
Вот мой разбавленный код, надеюсь избавиться от большинства ненужного кода:
<?php
$filename = "json/exercises.json";
$filesize = filesize($filename);
$fp = fopen($filename, "r+");
#Accept the submitted form
$exLanguage = $_POST['exLanguage'];
$exTitle = $_POST['exTitle'];
$exStuff = $_POST['exStuff'];
#write to JSON with an incrementing ID
if (file_get_contents($filename) == "") {
$exercise = array (
"id" => 1,
"lang" => $exLanguage,
"title" => $exTitle,
"main_object" =>
[
"exStuff" => $exStuff
]
);
$exercise_json = json_encode($exercise, JSON_PRETTY_PRINT);
file_put_contents($filename, $exercise_json, FILE_APPEND);
} else {
#Get the last set ID
$jsonid = json_decode(fread($fp, $filesize), true);
$last = end($jsonid);
$title = prev($jsonid);
$lang = prev($jsonid);
$id = prev($jsonid);
$exercise = array (
"id" => ++$id,
"lang" => $exLanguage,
"title" => $exTitle,
"main_object" =>
[
"exStuff" => $exStuff
]
);
$exercise_json = json_encode($exercise, JSON_PRETTY_PRINT);
file_put_contents($filename, $exercise_json, FILE_APPEND);
}
?>
Теперь, что это делает, если мой JSON пуст, он добавляетпервый массив правильно с идентификатором в 1. Затем, если я попытаюсь добавить в свой json снова, он добавит его правильно с идентификатором в 2. Но любая дальнейшая попытка записи в JSON выдаст мне следующие ошибки:
Предупреждение: end () ожидает, что параметр 1 будет массивом, значение NULL
Предупреждение: prev () ожидает, что параметр 1 будет массивом, значение NULL
Предупреждение: prev () ожидает параметр 1быть массивом, задано значение NULL
Предупреждение: prev () ожидает, что параметр 1 будет массивом, задано значение NULL
Я попытался сделать
$reset = reset($jsonid);
после записиподать, но это не сработало, просто дал мне еще одну ошибкуили на третьей записи для сброса тоже даётся ноль.
Может кто-нибудь сказать, пожалуйста, как заставить это тоже работать?Или, если есть гораздо более простой способ сделать это?