php foreach引用,php慎用foreach引用&

本文探讨了在PHP中使用foreach遍历数组时,通过引用符号更改数组元素值可能导致的意外后果。当在后续的foreach循环中,未正确处理引用,数组元素的值可能会被意外修改。解决方案是避免在foreach内部使用已存在的变量名,如使用$value_temp代替$value,以防止变量作用域的混淆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在foreach一个数组时需要在遍历同时改变对应符合条件元素的值,那么直接可以使用引用符号“&”,例如:$variable = ['a', 'b', 'c'];

如果要改变第三个值,直接<?php

$variable = ['a', 'b', 'c'];

foreach ($variable as $key => &$value) {

if($key == 2)$value = 'ccc';

}

var_dump($variable);

?>

输出echo $variable[2];结果就是ccc了。此时$value指向数组地址$variable[2],因为php变量有效范围大($value在此php文件中均有效),和其它语言,Java,C/C++不一样,作用域很大不局限在foreach里面,所以如果在后面再作一个foreachforeach ($variable as $key => $value) {

}

那么,数组$variable[2]值就会变成b,结果似乎超出了我们意料!(为啥不是CCC呢)

看图:

5651f52455a93fe57d5e6295834508af.png

最后地址首先指向$variable[0]->a,紧接着指向$variable[1]->b,最后指向自己,而此时自己就是指向$variable[1]的值,所以变成了b,也就是超出我们预期。那如何避免这种错误发生呢,那就是在foreach的时候,$value用一个不会和其它变量重名的名字即可,比如$value_temp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值