$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);
Вышеприведенный код дал следующий результат:
У меня есть ошибка, потому что я не слил их.
Я попытался слиться вот так:
$finalJson = array_merge($finalJson, $myArray);
но выход echo $finalJson
- это один объект вместо 3.
Обновить:
Ваша настоящая проблема сводится к использованию array_merge
в ассоциативном массиве. Поведение array_merge
заключается в переназначении дубликатов ключей, если они являются ассоциативными (см. docs):
Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа перезапишет предыдущий. Если, однако, массивы содержат числовые клавиши, более поздняя величина не будет перезаписывать исходное значение, но будет добавлена.
И поскольку $myArray
явно использует строки как ключи, значения в $finalJson
переназначаются. Что вам нужно сделать, это либо создать уникальные ключи на каждой итерации, либо просто нажать значения $myArray
на числовой индекс $finalJson
(как показано в моем первоначальном ответе ниже)
Проблема заключается в следующем:
$myArray["item"]["content"] = $item_content;
он внутри цикла, каждый раз переназначая значение $myArray["item"]["content"]
, и не добавляя его в массив. Я подозреваю, что то, что вы хотели сделать, это добавить это в конец вашего цикла (для каждого нового значения $myArray
):
$finalJson[] = $myArray;
Затем на следующей итерации $myArray
будет переназначаться, а новое значение будет добавлено к переменной $finalJson
.
Считаете ли вы использование array_push?
array_push всегда предпочтительнее myArray [] = $ value
$array[]
. На самом деле, $array[]
рекомендуется ! Прочтите первую заметку в документации: «Примечание: если вы используете array_push () для добавления одного элемента в массив, лучше использовать $ array [] =, потому что в этом случае нет необходимости вызывать функцию».
$finalJson
теперь является числовым индексированным массивом, вы можете просто написатьdata.length
. Для объектов вы можете использоватьObject.keys(anObject).length
илиvar i=0, p; for (p in object) { if (object.hasOwnProperty(p)) ++i; } console.log(i);