Как остановить перезапись первого индекса в массиве

#php #arrays #json #function #array-push

#php #массивы #json #функция #array-push

Вопрос:

У меня возникла проблема с добавлением более одного комментария к массиву

Когда я отправляю комментарий, он перезаписывает предыдущий

 
include "includes/globals_constants.php"; 

$comments = [];

if (isset($_POST["commentSubmit"])) {

    setComment($comments);

}

function setComment($data) {

    $comment = htmlspecialchars($_POST["comment"]);
    $blogitem = [
        "comment" => $comment
    ];

    array_push($data, $blogitem);

    if (file_put_contents(DBCOMMENTS, json_encode($data, JSON_PRETTY_PRINT))) {
        return true;
    }
}
  

Комментарии:

1. Из документа file_put_contents() : «В противном случае существующий файл перезаписывается, если не установлен флаг FILE_APPEND».

2. Он перезаписывает где? В файле? Итак, сделайте file_put_contents(DBCOMMENTS, json_encode($data, JSON_PRETTY_PRINT), LOCK_EX | FILE_APPEND) .

3. Можете ли вы объяснить это подробнее? Какие части этого кода отвечают за перезапись чего-либо?

Ответ №1:

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

Код:

 function setComment (amp;$data) {...}
  

Ответ №2:

Предположение: заменить

 array_push($data, $blogitem);
  

с помощью

 global $comments;
array_push($comments, $blogitem);
  

Вопрос: необходима ли эта инкапсуляция?

 $blogitem = [ "comment" => $comment ];