• PHP как правильно работать с JSON?

    @a_ovchinnikov
    Web developer
    Дело в том, что сейчас вы просто записываете в файл содержимое переменной $arr, которая всегда будет одинаковой, независимо от содержимого файла:

    fwrite($fp, json_encode($arr) );

    Правильный алгоритм таков:

    1. Получили содержимое файла;
    2. С помощью функции json_decode сделали из содержимого ассоциативный массив;
    3. Дописали новые данные в конец этого массива;
    4. С помощью функции json_encode из массива снова получили JSON-строку;
    5. Записали результат в файл.

    В целом структура вашего кода очень похожа на то, что я описал. Вероятно, ошибка вот где:

    if(isset($file)){
    $arr = array();
    }
    $arr[count($arr)+1]["name"] = $name;
    $arr[count($arr)]["email"] = $email;
    echo json_encode($arr);


    Вы создали пустой массив, а надо было проинициализировать его данными из файла. Также конструкция echo здесь ни к чему, если конечно только вы не используете ее в тестовых целях.

    Кстати, еще один лайфхак - вставку значения в конец массива можно сделать чуть проще:

    $arr[] = [
        'name' => $name,
        'email' => $email
    ];


    Оператор [] позволяет положить значение в конец массива. В данном случае мы кладем ассоциативный массив.
    Ответ написан
    Комментировать