在PHP中,我正在运行一个带有ORDER BY子句的mysql_query。然后我迭代结果来构建一个关联数组,以row_id为键。
然后,我在该数组上调用json_encode并输出结果。
此页面加载了AJAX,并在Javascript变量中定义。当我遍历那个Javascript变量时,我是否仍然拥有从mysql_query返回的顺序?
答案 0 :(得分:11)
PHP数组在维护插入顺序的属性方面有些独特。 Javascript本身没有关联数组。它有对象,通常用作关联数组。这些不保证任何特定的密钥订单。
为什么不将它们作为数组输出?这将有一个特定的顺序。如果您想要某种密钥查找,为什么订单很重要?
答案 1 :(得分:5)
cletus说的是正确的,但根据我的经验,大多数浏览器都会维护订单。话虽这么说,你应该考虑使用Array
。如果您需要在客户端收到它后对其进行排序,只需在JavaScript中使用.sort()
函数:
rows.sort(function(a, b) {
return a.row_id - b.row_id;
}
虽然它似乎有效但是对象中的属性顺序不能计算在内。请参阅下面的许多评论以获取更多信息(比我更聪明的眼睛)。但是,这是我用来测试自己有限测试中的行为的代码:
var test = {
one: 'blah',
two: 'foo',
another: 'bar'
};
for (prop in test) {
document.write(prop + "<br />");
}
打印(在Firefox 3.6.3和Chrome 5.0.375.9中):
one
two
another
此外,您可能希望确保从json_encode()
获取需要的JSON编码类型,例如对象(使用{}
花括号)而不是数组([]
大括号)。您可能需要将JSON_FORCE_OBJECT
传递给json_encode()
以强制它。
Array
方法是首选的方式)