猿问

有关php foreach 引用的问题

foreach使用&对数组arr2遍历之后,再次对数组遍历,得到的结果很困惑,不知哪位大神能说下&遍历指针是怎么移动的呢。代码如下:
$arr2=['a','s','d'];
foreach($arr2as$k=>&$v){
echo$k."".$v."
";
}
//unset($v);
foreach($arr2as$k=>$v){
echo$k."";
echo$v."".current($arr2)."
";
}
结果:0a1s2d0aa1sa2sa
为什么第二次遍历的时候指针移动到s就停止了呢
白猪掌柜的
浏览 435回答 2
2回答

噜噜哒

原因:在第一次的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改变数组的值的问题php数组类对象值传递引用传递区别

江户川乱折腾

或者你可以这么做:
随时随地看视频慕课网APP
我要回答