【问题标题】:Is the order of an associative array guaranteed in PHP?PHP 中是否保证关联数组的顺序?
【发布时间】:2009-06-04 14:32:24
【问题描述】:

当我在 php 中对 associatve 数组执行 foreach 循环时,执行的顺序就是定义的顺序。

例如:

$arr = array("z" => "z", "a" => "a", "b" => "b");

foreach($arr as $key => val)
  print("$key: $val\n");

输出:

z: z
a: a
b: b

$arr = array("a" => "a", "b" => "b", "z" => "z");

输出:

a: a
b: b
z: z

那么我的问题是:这种行为是在规范级别定义的吗?我是否可以合理确定这种行为在 PHP 的未来版本中不会改变?

【问题讨论】:

    标签: php


    【解决方案1】:

    来自PHP Manual

    PHP 中的数组实际上是有序的 地图。地图是一种关联的类型 键的值。此类型已优化 用于几种不同的用途;有可能 被视为一个数组,列表(向量), 哈希表(一个实现 地图),字典,集合,堆栈, 排队,可能还有更多。

    数组是有序的。顺序可以是 使用各种排序进行更改 功能。

    因此,您可以确定(至少目前)订单将被维持。如果这种行为发生改变,我会感到非常惊讶,因为它已明确说明,因此将有大量代码依赖它。

    【讨论】:

    • 谢谢!无论出于何种原因,我都忽略了这一点——可能是在我仍然认为它不适用于关联数组的时候。
    【解决方案2】:

    这永远不会改变。

    【讨论】:

    • 这些不是您要查找的更改。 绝地挥手吗
    【解决方案3】:

    因为数组总是有序的,而迭代数组最简单、最快的方法就是从第一个元素到最后一个元素(所以没有充分的理由改变 foreach() 的行为),你可以有理由确定这种行为不会改变。

    【讨论】:

      【解决方案4】:

      您的问题似乎来自 Perl 编程,其中“数组”不能保证按照您创建它们的顺序。但是在 PHP 中它一直是有序的,并且永远都是,否则很多代码都会中断。

      【讨论】:

        猜你喜欢
        • 2012-07-14
        • 1970-01-01
        • 2011-05-22
        • 1970-01-01
        • 2011-06-11
        • 2010-09-24
        • 2010-11-04
        • 2012-09-04
        相关资源
        最近更新 更多