我写PHP很多年了,还是会犯低级错误。今天在foreach中引用变量的时候遇到了一个坑。PHP版本是5.6.12。代码如下:
?php$arr=['a ',' b ',' c ',' d ',' e '];foreach ($arr as $i=$a) { $a=$a.'_ '。$ a;echo $ a . ' br} echo“HR”;foreach($ arr as $ I=$ a){ echo $ a . ' br ';} echo“HR”;print _ r($ arr);输出结果
一开始看到第二个foreach输出的结果是令人费解的。如何输出两个d_d?
仔细一想,原来是因为PHP foreach中$a的作用域是整个函数的局部变量,所以在循环外仍然有效,而不是在循环内封闭。
因此,执行第二个foreach时的$a不是一个新变量,而是一个仍然指向$arr数组第五个元素的地址引用。
当第二个foreach循环时,它实际上一直在给$arr数组的第五个元素赋值。
特殊任务情况,
第一次:a_a赋给第五个元素,结果是:【a_a,b_b,c_c,d_d,a_a】
第二次:b_b赋给第五个元素,结果是:【a_a,b_b,c_c,d_d,b_b】
第三次:c_c赋给第五个元素,结果是:[a_a,b_b,c_c,d_d,c_c]
第四次:d_d赋给第五个元素,结果是:[a_a,b_b,c_c,d_d,d_d]
第五次:此时因为第五个元素变成了d_d,所以d_d再次赋给第五个元素,结果还是:【a_a,b_b,c_c,d_d,d_d】
解决方法:
1.尽量不要使用相同的循环变量名;
2.每次使用或重复使用前取消设置($a );处理、发布地址申请
仍然使用上面的代码示例:
$arr=['a ',' b ',' c ',' d ',' e '];foreach ($arr as $i=$a) { $a=$a.'_ '。$ a;echo $ a . ' br} echo“HR”;echo $ a;echo ' hr//此处的unset会删除unset($ a);echo $ a=' cccecho ' hrprint _ r($ arr);echo ' hrforeach($ arr as $ I=$ a){ echo $ a . ' br ';} echo“HR”;print _ r($ arr);输出结果:
现在很正常,所以一定要注意这些小细节
以上就是边肖带来的PHP中使用引用变量foreach的坑的简单介绍。希望大家多多支持我们~