如何在不引用$ array1的情况下更改$ array2中的值?

时间:2014-09-27 03:45:41

标签: php arrays reference

考虑以下PHP代码段。

$array1 = array(1,20);
$x = &$array1[1];
$array2 = $array1;
$array2[1] = 22;
print_r($array1[1]); // Output is 22

此处$array2未引用$array1,但如何通过更改$array2的值来更改$array1中的值?

1 个答案:

答案 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

这是因为对象总是通过引用复制,而数字和字符串按原样复制。