Как кодировать массив PHP в массив JSON, а не объект?

Я пытаюсь json_encode массив, который возвращается из запроса Zend_DB.

var_dump дает: (Вручное добавление 0 члена не меняет изображение.)

array(3) { [1]=> array(3) { ["comment_id"]=> string(1) "1" ["erasable"]=> string(1) "1" ["comment"]=> string(6) "test 1" } [2]=> array(3) { ["comment_id"]=> string(1) "2" ["erasable"]=> string(1) "1" ["comment"]=> string(6) "test 1" } [3]=> array(3) { ["comment_id"]=> string(1) "3" ["erasable"]=> string(1) "1" ["comment"]=> string(6) "jhghjg" } } 

Закодированная строка выглядит так:

 {"1":{"comment_id":"1","erasable":"1","comment":"test 1"}, "2":{"comment_id":"2","erasable":"1","comment":"test 1"}, "3":{"comment_id":"3","erasable":"1","comment":"jhghjg"}} 

Что мне нужно:

 [{"comment_id":"1","erasable":"1","comment":"test 1"}, {"comment_id":"2","erasable":"1","comment":"test 1"}, {"comment_id":"3","erasable":"1","comment":"jhghjg"}] 

Это то, о чем говорит документация php.ini / json_encode.

Related of "Как кодировать массив PHP в массив JSON, а не объект?"

Как вы настраиваете свой начальный массив?

Если вы настроили его так:

 array( "1" => array(...), "2" => array(...), ); 

то у вас нет массива с числовыми индексами, кроме строк, и он преобразуется в объект в мире JS. Это может произойти также, если вы не зададите строгий порядок (т.е. начиная с 0 вместо 1).

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

 array( array(...), array(...), ); 

Добавлена ​​информация, которая расширяется при ответе Себа .

 php > print json_encode( array( 'a', 'b', 'c' ) ) ; ["a","b","c"] php > print json_encode( array( 0 => 'a', 1 => 'b', 2 => 'c' ) ) ; ["a","b","c"] php > print json_encode( array( 1 => 'a', 2 => 'b', 3 => 'c' ) ) ; {"1":"a","2":"b","3":"c"} php > 

Примечание: его форматирование таким образом с хорошей причиной:

Если вы хотите отправить

 {"1":"a","2":"b","3":"c"} 

в виде

 ["a","b","c"] 

Когда вы сделали $data[1] в Php, вы вернетесь «a», но со стороны JavaScript вы получите «b».

Общим способом проверки традиционного непрерывного массива в php является проверка индекса «0». Попытайтесь добавить это в свой массив, он, вероятно, будет рассматривать массив вместо хэшмапа.

У меня была аналогичная проблема, она работала после добавления «одиночных кавычек» вокруг строки json_encode. Следуя из моего js-файла:

 var myJsVar = <?php echo json_encode($var); ?> ; -------> NOT WORKING var myJsVar = '<?php echo json_encode($var); ?>' ; -------> WORKING