海滨擎蟹

面试遇到的坑(2)—— 二维数组的子数组(第二维数组)赋值给新变量,是值引用还是地址引用?

如题,依旧是之前的那一位看似资深的面试官问的问题。

印象中,php = 赋值一直是值引用,但是面试的时候忽然被问了这个问题,有点懵。

一般用到的二维数组都是,比如说接口返回的结果集,一般都是定义好第二维数组,再反过来添加到二维数组中,之后再序列化、JSON 化。没有这样先赋值给新变量,再修改的。感觉上是不对的,但确实没有测试过。所以我的回答就是,应该是值引用,但具体的要上机测试一下才能确定。这回答我当然也知道他不可能满意的。

现在自己测试一下,结果如下:

    /**
     * 测试内容:二维数组中,第二级数组是否可以在赋值给变量后,
     * 是否可以通过修改变量的方式,修改原来的二维数组
     * 结论:二维数组中的第二维赋值给新的变量,只是值引用,修改新的变量,与原二维数组无关。
     */
    public function actionTestArray()
    {
        $demoArr = [[1,2,3],[1,2],[1]];

        echo '修改前:';
        var_dump($demoArr);

        $a = $demoArr[0];
        $a[0] = 3;
        $a[2] = 1;

        echo '修改后:';
        var_dump($demoArr);
    }

要想在赋值之后还能修改到原来的数组中,那必须是引用赋值,即 $a = $demoArr[0];,这样是可行的。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »