考虑以下PHP代码段。
$array1 = array(1,20);
$x = &$array1[1];
$array2 = $array1;
$array2[1] = 22;
print_r($array1[1]); // Output is 22
此处$array2
未引用$array1
,但如何通过更改$array2
的值来更改$array1
中的值?
答案 0 :(得分:0)
如果您希望$array2
成为$array1
的引用,那么您可以使用$x
执行相同操作。
$array2 = &$array1;
现在,您在$array1
或$array2
中所做的任何更改都会在两个数组中都可见,因为$array2
只是对$array1
的引用。
<强>更新强>
考虑一下,您可能正在看的是一种更改值的方法,但仍然拥有数组的完整副本。这对于一个对象是可行的。
$obj = new stdClass();
$array1 = array(1, 20);
$array1[1] = $obj;
$array1[1]->color = 22;
$array2 = $array1;
$array2[1]->color = 33;
echo $array1[1]->color; // prints 33
这是因为对象总是通过引用复制,而数字和字符串按原样复制。