2016-01-20 21 views
2

目前我回到通過Ajax PHP數組的形式:如何格式化一個通過Ajax以這種方式返回給javascript的php數組?

$months = array(November, December, January); 

有一次,我的價值迴歸的Javascript我需要一個JS庫我給它這樣格式化爲它兼容」使用米:

var months = [[0, "November"], [1, "December"], [2, "January"]]; 

我試圖返回它作爲從PHP和JSON關聯數組編碼它,我接收到:

[["November"],{"1":"December"},{"2":"January"}] 

爲什麼第e索引號0消失一次json_encoded?而且這種格式與之前的格式相同嗎?

回答

4

JavaScript會將關聯數組轉換爲Javscript對象。

讓您的格式將使用這個數組形式最簡單的方法:

$months = array(
    array(0, 'November'), 
    array(1, 'December'), 
    array(2, 'January') 
); 

這應該返回以下時,它被編碼;

[[0,"November"],[1,"December"],[2,"January"]] 

編輯: 在動態創建它的要求方面:

$months = array(); 
$dateRange = array(
    'November' => 1000, 
    'December' => 1500, 
    'January' => 300, 
    'February' => 600 
); 

$counter = 0; 
foreach ($dateRange as $month => $amount) { 
    $months[] = array($counter, $month); 
    $counter++; 
} 

echo json_encode($months); 

輸出:[[0,"November"],[1,"December"],[2,"January"],[3,"February"]]

+0

得益於它完美的作品以這種格式。如果我可能會問,如何以編程方式創建該數組結構?我這樣做的方式是循環: $ months = array(); $ counter = 0; foreach($ dateRange as $ month => $ amount){ $ months [] = array($ counter => $ month); } 但是一旦我編碼,我又一次留下格式:[[「November」],{「1」:「December」},{「2」:「January」}],省略了0索引並使用大括號。 –

+0

@MiguelV更新了答案,提供了一些額外的信息,說明如何在循環中構建它。最主要的是不要使用'$ x => $ y'使它成爲一個關聯數組,而只需使用'$ x,$ y' – Mikey

+0

謝謝,我正在做一個關聯數組而不是兩個數組項。你最好。 –

相關問題