这道经典PHP面试题有点不懂

<?php
   //第2题:
    $arr = [1,2,3];
    foreach($arr as &$v) {
        //nothing todo.
    }
    foreach($arr as $v) {
        //nothing todo.
    }
    var_export($arr);
    //output:array(0=>1,1=>2,2=>2),你的答案对了吗?为什么
?>

作者:舒铭 链接:https://zhuanlan.zhihu.com/p/... 来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

请问为什么是这样呢?

阅读 6.2k
评论 2017-02-07 提问
    7 个回答

    没怎么学过PHP,大体猜测。

    第一个foreach是引用赋值,第一个循环结束后$v指向数组的第三个元素。

    也就是说$v等同于$arr[2]。

    然后在第二个循环里给$v赋值。第一次后数组变成[1,2,1],第二次变成[1,2,2]第三次$v = $arr[2],也就是自身赋值给自身,所以最后为[1,2,2]。

    评论 赞赏