2010-01-22 90 views
1

使用CakePHP(在PHP 5.2.6),我做一個表上的列表查詢返回的數組,如:如何編碼爲JSON編碼數組從非連續陣列

陣列 (

[0] => None 
[3] => Value 1 
[5] => Value 2 

因爲它不是一個順序數組,json_encode()將它編碼爲一個對象,而不是我需要填充可Jeditable Select的JSON數組。

PHP 5.2.6不支持任何附加參數,所以我不能強制它創建一個JSON編碼數組。

我的問題,有誰知道我怎麼能以一種乾淨的方式解決這個問題?

回答

5

看到http://docs.php.net/array_values

array_values()返回從輸入陣列和索引數字陣列的所有的值。

例如

$a = array(
    0 => 'None', 
    3 => 'Value 1', 
    5 => 'Value 2' 
); 
$x = array_values($a); 
print_r($x); 
echo json_encode($x); 

打印

Array 
(
    [0] => None 
    [1] => Value 1 
    [2] => Value 2 
) 
["None","Value 1","Value 2"] 

編輯:JavaScript數組不能有縫隙。您必須填寫缺失的元素,例如空值。

$a = array(
    0 => 'None', 
    3 => 'Value 1', 
    5 => 'Value 2' 
); 

$na = array_pad(array(), max(array_keys($a)), null); 
$a += $na; 
ksort($a); 
echo json_encode($a); 

打印["None",null,null,"Value 1",null,"Value 2"]

+0

謝謝你這麼多的廣泛的答案,但是我必須保留指數,我忘了補充部分。 因此,如果用戶選擇某個數值(ID)發佈並顯示Value1和Value2。我很抱歉沒有真正清楚! – JanWillem 2010-01-22 17:38:20

+0

你也可以用js對象來做到這一點。你需要另一個原因你需要一個數組嗎? – VolkerK 2010-01-22 18:35:37

+0

謝謝VolkerK,這節省了我的一天,我沒有用空值填充它,但是使用了排序,並且它做了竅門;) – JanWillem 2010-01-24 20:39:41

2

如果您想保留索引,你需要使用一個對象。如果不是,則通過array_merge傳遞它以重新索引數組。

www.php.net/array_merge

+0

謝謝你的回答,但是我需要它是一個數組,並且需要保存索引... – JanWillem 2010-01-22 17:51:55

+1

JSON *中的對象是一個非順序鍵的數組。來自json.org: *名稱/值對的集合。在各種語言中,這被實現爲對象,記錄,結構,字典,散列表,鍵控列表或關聯數組。 *有序的值列表。在大多數語言中,這是作爲數組,矢量,列表或序列實現的。 – voidstate 2010-01-22 22:17:28