array_merge перед кодированием json в PHP

0
$myArray = array();

for($i=0;i<2;$i++){
..
.. //get the content logic here

assign it to array
$myArray["item"]["content"] = $item_content;
}
echo json_encode($myArray);

Вышеприведенный код дал следующий результат:

Изображение 174551

У меня есть ошибка, потому что я не слил их.

Я попытался слиться вот так:

$finalJson = array_merge($finalJson, $myArray); 

но выход echo $finalJson - это один объект вместо 3.

Теги:

2 ответа

1
Лучший ответ

Обновить:

Ваша настоящая проблема сводится к использованию array_merge в ассоциативном массиве. Поведение array_merge заключается в переназначении дубликатов ключей, если они являются ассоциативными (см. docs):

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

И поскольку $myArray явно использует строки как ключи, значения в $finalJson переназначаются. Что вам нужно сделать, это либо создать уникальные ключи на каждой итерации, либо просто нажать значения $myArray на числовой индекс $finalJson (как показано в моем первоначальном ответе ниже)


Проблема заключается в следующем:

$myArray["item"]["content"] = $item_content;

он внутри цикла, каждый раз переназначая значение $myArray["item"]["content"], и не добавляя его в массив. Я подозреваю, что то, что вы хотели сделать, это добавить это в конец вашего цикла (для каждого нового значения $myArray):

$finalJson[] = $myArray;

Затем на следующей итерации $myArray будет переназначаться, а новое значение будет добавлено к переменной $finalJson.

  • 0
    эй, это сработало! Знаете ли вы, как рассчитать количество предметов (javascript). Я пытался data.item.length, он не может работать.
  • 1
    поскольку $finalJson теперь является числовым индексированным массивом, вы можете просто написать data.length . Для объектов вы можете использовать Object.keys(anObject).length или var i=0, p; for (p in object) { if (object.hasOwnProperty(p)) ++i; } console.log(i);
Показать ещё 10 комментариев
-1

Считаете ли вы использование array_push?

array_push всегда предпочтительнее myArray [] = $ value

  • 1
    чем отличается? предпочтительным?
  • 2
    Это не предпочтительнее $array[] . На самом деле, $array[] рекомендуется ! Прочтите первую заметку в документации: «Примечание: если вы используете array_push () для добавления одного элемента в массив, лучше использовать $ array [] =, потому что в этом случае нет необходимости вызывать функцию».
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню