今天就跟大家聊聊有关在PHP项目中使用foreach时需要注意哪些问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
写PHP好多年,但仍然会犯低级错误,今天遇到个foreach中引用变量时的坑,PHP版本为5.6.12代码如下:
& lt; PHP ? arr 美元;=,(& # 39;一个# 39;,,& # 39;b # 39;,, & # 39; c # 39;,, & # 39; d # 39;,, & # 39; e # 39;]; foreach (arr 美元;as i=祝辞美元,一美元),{ 美元才能a =,强生的# 39;美元_ # 39;只一美元; echo 才能;a 美元;强生# 39;& lt; br> & # 39;; } echo & # 39; & lt; hr> & # 39;; foreach (arr 美元;as i=美元在一个美元),{ echo 才能;a 美元;强生# 39;& lt; br> & # 39;; } echo & # 39; & lt; hr> & # 39;; print_r (arr)美元;
输出结果
一开始看到第二个foreach输出的结果感觉很是莫名其妙,怎么会输出两个d_d呢?
仔细想了想,原来因为PHP foreach中的一个美元的作用域是整个函数的局部变量,在循环外部仍然有效,而不是被封闭在循环内的,
所以当执行第二个foreach时的一个美元并不是新的变量,而是仍然指向arr数美元组第5个元素的地址引用,
当第二个foreach在循环时实际上是在不停的arr数美元给组的第5个元素赋值,
<强>具体赋值情况,强>
第一次:a_a赋值给第5个元素,结果为:[a_a、b_b c_c, d_d, a_a]
第二次:b_b赋值给第5个元素,结果为:[a_a、b_b c_c, d_d, b_b]
第三次:c_c赋值给第5个元素,结果为:[a_a、b_b c_c, d_d, c_c]
第四次:d_d赋值给第5个元素,结果为:[a_a、b_b c_c, d_d, d_d]
第五次:此时因为第五个元素已经变成d_d又重新把d_d赋值给第5个元素,结果还是为:[a_a、b_b c_c, d_d, d_d]
<强>解决办法:强>
1。尽量不使用相同的循环变量名;
2。每次使用完或再次使用前进行设置(美元);处理,解除地址应用
<强>还是用上面代码示例:强>
arr 美元;=,(& # 39;一个# 39;,,& # 39;b # 39;,, & # 39; c # 39;,, & # 39; d # 39;,, & # 39; e # 39;]; foreach (arr 美元;as i=祝辞美元,一美元),{ 美元才能a =,强生的# 39;美元_ # 39;只一美元; echo 才能;a 美元;强生# 39;& lt; br> & # 39;; } echo & # 39; & lt; hr> & # 39;; echo 美元; echo & # 39; & lt; hr> & # 39;;//,这里,unset 掉 设置(美元); echo a 美元;=,& # 39;ccc # 39;; echo & # 39; & lt; hr> & # 39;; print_r (arr); echo & # 39; & lt; hr> & # 39;; foreach (arr 美元;as i=美元在一个美元),{ echo 才能;a 美元;强生# 39;& lt; br> & # 39;; } echo & # 39; & lt; hr> & # 39;; print_r (arr)美元;
输出结果:
看完上述内容,你们对在PHP项目中使用foreach时需要注意哪些问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。