2013-04-24 171 views
1

我有一個PHP數組,它具有一個表ID作爲鍵和一個表字段作爲值。通過在JSON中編碼的PHP數組循環通過

示例PHP:

while($row = mysql_fetch_array($result)) 
{ 
    $id = $row['id']; 
    $array[$id] = $row['some_field']; 
} 

然後我用json_encode($array)得到的東西,如:

{"id1":"value1","abc":"123","xyz":"789"} 

我如何通過這個循環中,jQuery的?從我迄今發現的情況來看,似乎我需要知道關鍵。所以:

var obj = jQuery.parseJSON(jsonVar); 
alert(obj.abc); //prints 123 

但是我怎麼能得到這些值,如果我不知道密鑰,因爲他們是動態的?
我是否需要重構我的PHP數組?

回答

3

將php中的關聯數組編碼爲JSON對象後,它不再是一個數組,它是一個包含鍵和值的對象。您可以通過它們使用JavaScript中迭代for..in

for (var key in obj) { 
    console.log(obj[key]); 
} 

注:for..in不garuntee順序,如果你需要維持秩序,你將不得不讓你的數組索引,而不是key=>value,並使用for循環(或while)。

+0

明白了。我在假設,我不能使用'for..in'因爲[這個問題](http://stackoverflow.com/questions/9329446/for-each-in-a-array-how-to-do - 即,在JavaScript的)。然後我重讀了「for..in用於枚舉**對象的**屬性」的部分,認爲我有一個數組。所以,我究竟需要什麼。謝謝。 – Ryan 2013-04-24 21:57:28

+0

請注意,儘管由於含糊不清和無保證的排序順序,它並不被認爲是最佳實踐,但您可以使用for..in來循環常規數組......您只是*不應該*。 – JaredMcAteer 2013-04-24 22:11:51

3

您可以使用Object.keys獲取陣列的密鑰,然後遍歷它們。不像for...in,這給你處理它們之前.sort()鍵的選項:

var keys = Object.keys(obj).sort(); // sorting is optional 
for (var i=0; i<keys.length; i++) { 
    var key = keys[i], 
     val = obj[key]; 
    console.log(key+":"+val); 
}; 

在舊的瀏覽器,你需要一個填充工具,使Object.keys方法。 MDN has one on their documentation page

+0

我得到了JaredMcAteer的工作,但我也會檢查一下。排序會很好。 – Ryan 2013-04-24 21:53:51

+0

很酷,工作。謝謝。 – Ryan 2013-04-24 21:55:11