Я пытаюсь 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.
Как вы настраиваете свой начальный массив?
Если вы настроили его так:
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