2012-10-29 71 views
0

我正在製作一個php文件,它將json數據返回給javascript文件。目前它只返回最後的json對象而忽略其餘的。這是繼PHP文件不會返回完整的json數據

{"cartId":456187,"lastModified":"Tue, 20 Jan 2010 04:14:07 GMT","items":{"item":45752}} 

我怎樣才能解決這個問題我的PHP代碼

$arr = array(
    "cartId" => 456186, 
    "lastModified" => "Tue, 19 Jan 2010 03:14:07 GMT", 
    "items" => array(
    15642, 
    45616, 
    54984, 
    45751 
), 
    "cartId" => 456187, 
    "lastModified" => "Tue, 20 Jan 2010 04:14:07 GMT", 
    "items" => array(
    'item' => 15643, 
    'item' => 45617, 
    'item' => 54985, 
    'item' => 45752 
) 
); 
echo json_encode($arr); 

上面的代碼返回?

+1

的磁盤陣列不能有重複鍵,兩者不可JSON對象。 –

回答

3

第一元件與所述第二元件覆蓋爲他們的密鑰相同。與第二項中的items陣列相同。

嘗試

$arr = array (
    array(
    "cartId"  => 456186, 
    "lastModified" => "Tue, 19 Jan 2010 03:14:07 GMT", 
    "items"  => array(
     15642, 
     45616, 
     54984, 
     45751, 
    ), 
), 
    array(
    "cartId"  => 456187, 
    "lastModified" => "Tue, 20 Jan 2010 04:14:07 GMT", 
    "items"  => array(
     15643, 
     45617, 
     54985, 
     45752, 
    ), 
), 
); 
+0

語法錯誤,不匹配的括號 –

+0

錯誤已更正。請使用語法突出的體面編輯器編寫代碼。 –

+0

這不會返回所有的'item'。它只是返回最後一個項目 – 2619

8

這應該工作:

$arr = array(
    array(
    "cartId" => 456186, 
    "lastModified" => "Tue, 19 Jan 2010 03:14:07 GMT", 
    "items" => array(
     15642, 
     45616, 
     54984, 
     45751 
    ) 
), 
    array(
    "cartId" => 456187, 
    "lastModified" => "Tue, 20 Jan 2010 04:14:07 GMT", 
    "items" => array(
     15643, 
     45617, 
     54985, 
     45752 
    ) 
) 
); 
echo json_encode($arr); 

原因你的錯誤是因爲你不能在一個PHP數組重複鍵(或爲此事JSON對象) 。後面的鍵覆蓋前者,並且創建了較小版本的數組。

在這裏,我們的分組項目到子陣列。

+1

這仍然會覆蓋各上一個項目的第二項陣列 – CodePB

+1

@pburgess你試過運行此解決方案?它按預期工作。它正確生成兩個對象 – pankar

+0

@pankar你確定嗎?這取決於「預期」是什麼。第二個數組仍然覆蓋「items」數組中的每個先前的鍵。如果這是預期的行爲,那麼我相信它按預期工作,否則它不會。我仍然相信這會返回第二個對象,其中包含json編碼的字符串中的「items」:{「item」:45752},而不是每個元素。 – CodePB

0

你不能給同一指標

$arr = array(
     "cartId1" => 456186, 
     "lastModified1" => "Tue, 19 Jan 2010 03:14:07 GMT", 
     "items1" => array(
     15642, 
     45616, 
     54984, 
     45751 
    ), 
     "cartId2" => 456187, 
     "lastModified2" => "Tue, 20 Jan 2010 04:14:07 GMT", 
     "items2" => array(
     'items1' => 15643, 
     'items2' => 45617, 
     'items3' => 54985, 
     'items4' => 45752 
    ) 
    ); 
    echo json_encode($arr); 
+0

覆蓋'cartId'和'lastModified' –

+0

10x用於指向.. –

+0

技術上正確,但我討厭解析該問題。 –

0

這裏就是你基本上需要做的:

$arr = array(
     array(
      "cartId" => 456186, 
      "lastModified" => "Tue, 19 Jan 2010 03:14:07 GMT", 
      "items" => array(
       15642, 
       45616, 
       54984, 
       45751 
      ), 
     ), 
     array(
      "cartId" => 456187, 
      "lastModified" => "Tue, 20 Jan 2010 04:14:07 GMT", 
      "items" => array(
       'item' => 15643, 
       'item' => 45617, 
       'item' => 54985, 
       'item' => 45752 
      ) 
     ) 
    ); 

因此,大家可以看到我們有包裝陣列的內部嵌套元素的集合。

0

你沒有正確設置多維數組。

要做到這一點,你需要使用array()建立嵌套/內陣列。

$arr = array(array("key"=>"value"), array("key"=>"value"));

,而不是你目前在做什麼:

$arr = array(("key"=>"value"), ("key"=>"value"));