2015-01-05 3 views
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); 

Приведенный выше код произвел этот результат:array_merge перед тем JSon закодировать в PHP

enter image description here

Который есть ошибка, потому что я не объединить их.

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

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

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

ответ

1

Update:

Ваш реальная проблема вниз к использованию array_merge на ассоциативном массиве. Поведение array_merge является переназначить дубликаты ключей, если они являются ассоциативными (см the 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; для (p в объекте) {if (object.hasOwnProperty (p)) ++ i; } console.log (i); ' –

+0

wait. Я попробовал data.length, он вернулся 27118. lol. –

-1

ли вы рассмотреть вопрос об использовании array_push?

array_push всегда предпочтительнее, чем MyArray [] = $ значение

+1

что это такое? предпочтительным? –

+2

Не рекомендуется использовать '$ array []'. На самом деле '$ array []' _Recommended_! Прочитайте [первое примечание в документах] (http://php.net/array_push) _ "Примечание. Если вы используете array_push() для добавления одного элемента в массив, лучше использовать $ array [] =, потому что таким образом нет накладных расходов на вызов функции. »_ –

+0

сколько записей мы говорим здесь? –

Смежные вопросы