面试遇到的坑(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];
,这样是可行的。