#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 ];