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就停止了呢
2 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
原因:在第一次的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数组类对象值传递引用传递区别
江户川乱折腾
TA贡献1851条经验 获得超5个赞
或者你可以这么做:$arr2=['a','s','d'];foreach($arr2as$k=>&$v){echo$k."".$v.PHP_EOL;}while(current($arr2)){echokey($arr2).'->'.current($arr2).PHP_EOL;next($arr2);}输出:0a1s2d0->a1->s2->d
- 2 回答
- 0 关注
- 434 浏览
添加回答
举报
0/150
提交
取消