有关php foreach 引用的问题

查看:79
本文介绍了有关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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆