为了账号安全,请及时绑定邮箱和手机立即绑定

有关php foreach 引用的问题

有关php foreach 引用的问题

PHP
白猪掌柜的 2019-05-25 17:53:05
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数组类对象值传递引用传递区别
                            
查看完整回答
反对 回复 2019-05-25
?
江户川乱折腾

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);
}
输出:
0a
1s
2d
0->a
1->s
2->d
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 434 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信