在 PHP 中,foreach 循环保证按照数组的顺序进行迭代吗?

74
当将数组传递给 foreach 时,输出顺序是否保证与输入顺序相同?我知道在某些语言中,输出顺序不保证,因为每个元素同时处理。例如,我将已排序的数组传递给 foreach 来写入文件。 我希望确保数组在输出文件中按顺序排列。

3
好的,请提供需要翻译的内容。 - Gordon
以上已经有答案了,但是如果您需要在进行foreach循环之前对数组进行排序,请查看array_multisort(): http://php.net/manual/en/function.array-multisort.php - o1iver
2
我在阅读 PHP foreach 文档后也有同样的问题。文档并没有明确说明顺序是否会保持不变。我不是在谈论示例或注释。唯一的参考是关于当前元素和下一个元素的 reset() - Sebastian
1
我也一样。我刚刚查看了所谓的“参考资料”,并没有看到任何关于 PHP 根据规范保留关联数组输入顺序的内容。除非有其他更有意义的参考资料,否则问题仍未得到回答(从正式的角度来看),这可能与实现或版本有关。 - Hibou57
我真的希望你在问题中附上了代码示例。 - Kellen Stuart
确实。即使使用数字索引,它始终保持创建顺序。如果您这样做:$a = []; $a[ 0 ] = 'zero'; $a[ 2 ] = 'two'; $a[ 1 ] = 'one'; var_export( $a ); 您将看到内部顺序是 [ 0, 2, 1 ]。如果您执行 foreach( $a as $n ){ echo $n . " "; } 您将看到 zero two one - Xavi Montero
4个回答

57

是的,无论你给foreach什么顺序,它都会以相同的顺序进行迭代。而在你的情况下,数组将按照输出文件中的排序方式进行排序。


18

相关的参考资料可能不是之前提到的foreach或排序,而是数组。

语言参考 — 数组中写道:

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


8

这是正确的,foreach会按照输入数组的顺序进行输出。


2
是的 - 数组内的项将按照它们的顺序输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接