繁体   English   中英

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

[英]Is the order of an associative array guaranteed in 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版本中不会更改此行为吗?

PHP手册

PHP中的数组实际上是一个有序映射。 映射是将值与键关联的类型。 此类型针对多种不同用途进行了优化; 它可以被视为数组,列表(向量),哈希表(地图的实现),字典,集合,堆栈,队列,甚至更多。

数组是有序的。 可以使用各种排序功能更改订单。

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

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

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

这永远不会改变。

暂无
暂无

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

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