有关php foreach 引用的问题
本文介绍了有关php foreach 引用的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
foreach使用&对数组arr2遍历之后,再次对数组遍历,得到的结果很困惑,不知哪位大神能说下&遍历指针是怎么移动的呢。
代码如下:
$arr2 = ['a','s','d'];
foreach ($arr2 as $k => &$v){
echo $k." ".$v."<br>";
}
//unset($v);
foreach ($arr2 as $k => $v){
echo $k." ";
echo $v." ".current($arr2)."<br>";
}
结果:
0 a
1 s
2 d
0 a a
1 s a
2 s a
为什么第二次遍历的时候指针移动到s就停止了呢
解决方案
原因:
在第一次的
foreach
中采取了引用传递的方式,第一次循环$v
指向$arr2[0]
的存储空间,第二次指向>$arr2[1]
的存储空间,循环结束则指向$arr2[2]
的存储空间;在第二次的
foreach
中采取了值传递的方式,第一次循环给$v
赋值了a
,即给$arr2[2]
赋值了a
,第二次同上,$arr2[2]
的值变为了$arr2[1]
的值,则$arr2
变成了[a,s,s]
,所以是数组的最后一个元素变成了倒数第二个元素的值
解决办法:
在第一个
foreach
结束后加一句unset($v)
;第二次
foreach
循环不用$v
换个其他名字的变量
参考:
这篇关于有关php foreach 引用的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文