Avatar ·

PHP中的foreach实际上是如何工作的?详细解析与示例

大家好!我已经用PHP写了几个月,但仍然不完全理解foreach是如何工作的。文档中说它是“遍历数组的便捷方式”,但我有一些找不到答案的问题。 例如,我知道使用带有引用的foreach(&$value)可以修改数组元素。但为什么循环结束后变量$value仍然引用最后一个元素?这会导致意外的bug。 我还感兴趣的是:底层发生了什么?每次foreach都会创建数组的副本吗?我听说PHP使用了copy-on-write机制,但我不明白这在循环上下文中是如何工作的。 下面是一个让我困惑的例子: ```php $array = [1, 2, 3]; foreach ($array as &$value) { $value *= 2; } // 现在 $array = [2, 4, 6] // 但如果循环后执行: foreach ($array as $value) { echo $value; } // 结果:2 4 4 而不是 2 4 6!为什么? ``` 我还注意到,在嵌套数组上使用foreach时