PHP中是否保证关联数组的顺序?

时间:2009-06-04 14:32:24

标签: php

当我在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版本中不会更改此行为吗?

4 个答案:

答案 0 :(得分:20)

来自PHP Manual

  

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

  

订购数组。订单可以   改变使用各种排序   功能

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这永远不会改变。