繁体   English   中英

我的关联数组的顺序是否会从PHP维护到Javascript?

[英]Will the Order of my Associative Array be maintained from PHP to Javascript?

在PHP中,我正在运行一个具有ORDER BY子句的mysql_query。 然后我迭代结果来构建一个关联数组,以row_id为关键。

然后,我在该数组上调用json_encode并输出结果。

此页面加载了AJAX,并在Javascript变量中定义。 当我遍历那个Javascript变量时,我是否仍然拥有从mysql_query返回的顺序?

PHP数组在维护插入顺序的属性方面有些独特。 Javascript本身没有关联数组。 它有对象,通常用作关联数组。 这些不保证任何特定的键盘顺序。

为什么不将它们作为数组输出? 这将有一个特定的顺序。 如果您想要某种键查找,为什么订单很重要?

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方法是首选)
  • 再次编辑(抱歉),因为我忽略了pcorcoran的评论,该评论与Chromium的问题跟踪器中的问题有关。 可以说,对象属性的顺序可靠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM