2009-03-26 2 views
8

나는 Zend_DB 쿼리에서 반환 된 배열을 json_encode하려고합니다.PHP 배열을 객체가 아닌 JSON 배열로 인코딩하는 방법은 무엇입니까?

위해서 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 문서에서 다음과 같이 표시됩니다.

답변

12

초기 배열을 어떻게 구성합니까? 다음 숫자 인덱스하지만 문자열 배열이없는

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

, 그는 JS 세계의 객체로 변환됩니다 :

당신처럼 설정합니다. 이는 엄격한 주문을 설정하지 않은 경우에도 발생할 수 있습니다 (즉, 1 대신 0으로 시작).

array(
array(...), 
array(...), 
); 
+2

+1 # 배열이 키를 0으로 시작되지되지 배열. phps는 잘못되었지만 어레이/해시의 별난 자식을 사랑합니다. 제대로 작동하지 않습니다. –

+0

코드가 Zend_DB 쿼리 결과로 반환하는 것입니다. –

+0

내가 말했듯이, 배열로 만들지 않아 숫자 키가있는 해시가됩니다.이 경우 숫자가 0 인 키가 0에 가까워집니다. 데이터베이스의 데이터에있는 것이기 때문에 시작하십시오. –

2

PHP에서 전통적인 연속 배열을 테스트하는 일반적인 방법은 인덱스 '0'을 확인하는 것입니다. 그것을 배열에 추가 해보면 아마 hashmap 대신 배열로 간주 할 것입니다.

6

추가 정보에 확장 : 전혀 처음에 키를 사용하지 않고 배열을 설정하려고 : 나는 원래 코드를 볼 수 없기 때문에

은, 그러나, 어둠 속에서 샷 Seb 님의 답변입니다. 당신은 당신이하고자 PHP에서 $data[1]했다

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

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

을 보낼 수 있다면

:

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 > 

참고 : 자사는 좋은 원인을 이런 식으로 서식 JavaScript 페이지에서 "b"를 다시 얻습니다.

-3

나는 비슷한 문제가 있었는데, json_encode 문자열 주위에 ''(작은 따옴표)를 추가 한 후에 작동하도록했습니다. 내 JS 파일에서 다음과 같습니다

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

그건 절대 의미가 없습니다. 그것은'var myJsVar = '{ "1": "a"....}''로 확장 될 것이고 이것은 배열이 아닌 * 문자열 *입니다. 적절한 JSON 구문 분석기로 전달하거나 나중에 myJsVar = eval (myJsVar')를 사용하여 JS Land에서 어떻게 든 사용할 수 있도록 해독해야 할 것입니다. –