foreach 是不是保证在 php 中以数组顺序进行迭代?

Posted

技术标签:

【中文标题】foreach 是不是保证在 php 中以数组顺序进行迭代?【英文标题】:Is foreach guaranteed to iterate in the array order in php?foreach 是否保证在 php 中以数组顺序进行迭代? 【发布时间】:2011-06-11 14:47:47 【问题描述】:

当一个数组被传递给foreach 时,输出顺序是否保证与输入相同?我知道在某些语言中,不能保证输出顺序,因为每个元素都是同时处理的。

例如,我将一个排序数组传递给foreach 以写入文件。我想确保该数组将在输出文件中排序。

【问题讨论】:

(参考) php.net/manual/en/control-structures.foreach.php 上面的答案,但是如果您需要在执行 foreach 循环之前对数组进行排序,请查看 array_multisort():php.net/manual/en/function.array-multisort.php 在阅读 php foreach doc 后,我带着同样的问题来到这里。它没有明确说明订单将保持不变。我不是在谈论示例,也不是 cmets。唯一的参考是reset()谈论当前元素和下一个元素。 我也没有。我刚刚查看了所谓的“参考”,并没有看到任何说明 PHP 根据规范保留关联数组的输入顺序的内容。除非有另一个更有意义的参考,否则这个问题仍然没有答案(正式地说),它可能同样取决于实现或版本。 我真的希望你在你的问题中给出了一个代码示例。 【参考方案1】:

是的......无论你给 foreach 什么命令,它都会以相同的顺序迭代。在你的情况下array will be sorted in the output file.

【讨论】:

【参考方案2】:

相关引用可能不是foreach 的引用或前面提到的排序,而是数组的引用。

Language reference — Arrays 说:

PHP 中的数组实际上是一个有序映射。

【讨论】:

【参考方案3】:

这是正确的,foreach 将按照与输入数组相同的顺序输出。

【讨论】:

【参考方案4】:

是的 - 项目将按照它们在数组中的顺序输出。

【讨论】:

以上是关于foreach 是不是保证在 php 中以数组顺序进行迭代?的主要内容,如果未能解决你的问题,请参考以下文章

在php中以ul li格式解析树数据时遇到一些困难

比较数组数组中的 ID,并在 PHP 中以 desc 顺序仅取一行与日期

如何在 foreach 循环之前/之后触发代码,只有在 PHP 7.4+ 中以一种有效的方式输入这个循环?

C#.NET 中是不是保证数组列表的顺序?

PHP内核深入研究 - 数组及其遍历顺序

PHP数组遍历与实现原理