2016-11-10 58 views
-1

我試圖從PHP到我的網站頁面獲取年月列表。該網站使用JavaScript,所以我需要這些數據爲JSON。將嵌套數組作爲對象的PHP編碼

生成我需要的信息沒有問題,但我在PHP上使用json_encode,所有嵌套數組都變成對象,因此,我無法在JavaScript上執行正確的操作。

這是我在做什麼,以產生對PHP數組:

$list = sql("SELECT DISTINCT YEAR(created) AS year FROM order"); 

foreach ($list as &$row) { 
    $row['month'] = array(); 

    for ($i=1; $i<=12; $i++) { 
     $row['month'][$i] = new stdClass(); 
     $row['month'][$i]->Month = date("M", strtotime(date("Y")."-".$i."-01")); 

     //more information goes here... 
    } 
} 

如果我只是打印使用return print_r($list);這個$list結果如下:

Array (
    [0] => Array (
     [year] => 2016 
     [month] => Array (
      [1] => stdClass Object (
       [Month] => Jan 
      ) 
      [2] => stdClass Object (
       [Month] => Feb 
      ) 
      //Etc... 

但是當我使用

return print_r(json_encode($list)); 
//or 
return print_r(json_encode($list, true)); 

所有的嵌套數組變成對象。例如,月陣列,變成一個對象,這是結果的console.log的打印屏幕:

enter image description here

是有辦法解決這一問題?還是我做錯了?

+3

那麼,你不能有從索引1開始的數組。如果你想要一個數組,你的索引必須是0 - 11. – deceze

+0

@deceze簡單!是如此專注於其他部分,忘了這個細節..謝謝。如果你能把它變成答案,那麼我可以接受。謝謝! – celsomtrindade

+0

我寧願先創建月份對象,然後像下面這樣將它添加到數組中:'$ row ['month'] [] = $ monthObj;' – Jeff

回答

0

如果你只需要一個月的名稱,然後替換這些行:

$row['month'][$i] = new stdClass(); 
$row['month'][$i]->Month = date("M", strtotime(date("Y")."-".$i."-01")); 

有了這個:

$row['month'][$i] = date("M", strtotime(date("Y")."-".$i."-01")); 

你不需要爲你特林完成什麼性病對象。

+0

我需要更多信息,但由於它與問題無關,所以我省略了代碼。 – celsomtrindade

+0

@CelsomTrindade在此處詢問或重新編輯您的問題。你不明白的是什麼? – besciualex

+0

看着欺騙評論,他回答了這個問題。 – celsomtrindade