2013-04-24 125 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