簡體   English   中英

如何將PHP數組編碼為JSON數組,而不是對象?

[英]How do I encode a PHP array to a JSON array, not object?

我正在嘗試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(...),
);

添加了有關Seb答案的信息。

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"]

當您在Php中執行$data[1] ,您將返回“a”,但在JavaScript方面,您將返回“b”。

在php中測試傳統的連續數組的常用方法是檢查索引“0”。 嘗試將其添加到您的數組,它可能會認為它是一個數組而不是hashmap。

我有一個類似的問題,在json_encode字符串周圍添加''(單引號)后得到它的工作。 從我的js文件開始:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM