在PHP中,我正在运行一个具有ORDER BY子句的mysql_query。然后我遍历结果来构建一个以row_id为关键字的关联数组。我的关联数组的顺序会从PHP维持到Javascript吗?
然后,我在该数组上调用json_encode并输出结果。
此页面使用AJAX加载,并在Javascript变量中定义。当我遍历该Javascript变量时,我是否仍然有从mysql_query返回的订单?
在PHP中,我正在运行一个具有ORDER BY子句的mysql_query。然后我遍历结果来构建一个以row_id为关键字的关联数组。我的关联数组的顺序会从PHP维持到Javascript吗?
然后,我在该数组上调用json_encode并输出结果。
此页面使用AJAX加载,并在Javascript变量中定义。当我遍历该Javascript变量时,我是否仍然有从mysql_query返回的订单?
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
方法是首选)再次PHP数组在维护广告订单的属性上有点独特。 Javascript本身没有关联数组。它有对象,通常用作关联数组。这些不保证任何特定的按键顺序。
为什么不将它们输出为数组?这将有一个特定的顺序。如果你想要某种键盘查找,为什么命令很重要?
在Opera和Chrome上已经失败,并且随着JS引擎不断优化,其他行为可能会发生变化。不要依赖对象顺序:去数组。 – bobince 2010-04-22 09:35:15
它似乎适用于我在Chrome(5.0.375.9在Mac OS X) - 你使用不同的版本,或者你有一段代码,可能导致Chrome无视命令?我只是从好奇心的角度来感兴趣。我同意你的看法 - 如果需要,最好的方法是使用数组和'.sort()'。 – awgy 2010-04-22 12:32:13
没关系 - 忽略pcorcoran的下面的评论,链接到Chromium问题跟踪器。 – awgy 2010-04-22 12:54:01