为什么PHP中foreach遍历数组修改值不生效,添加引用指针后才正常?
PHP foreach遍历修改数组元素失效的原因
核心原因
- PHP的
foreach遍历默认采用值拷贝模式:遍历过程中拿到的$city是原数组对应位置元素的独立副本,和原数组没有关联。你对$city做的新增字段、修改值等操作,全部作用在临时副本上,遍历结束后副本就会被销毁,自然不会反映到原$data数组里。 - 加上
&引用符号后,$city就变成了指向原数组对应元素的指针,此时对$city的所有修改都会直接写入原数组的对应位置,修改自然就能生效。
额外注意点
引用遍历结束后建议手动执行
unset($city);销毁引用变量。因为遍历结束后$city仍然会指向原数组的最后一个元素,如果后续你无意中修改了$city的值,会直接篡改原数组的最后一项,这是PHP引用遍历非常常见的隐式坑。
内容的提问来源于stack exchange,提问作者Octivia Bluekit
相关产品推荐
相关产品推荐

