Рассмотрим следующий фрагмент кода PHP.
$array1 = array(1,20); $x = &$array1[1]; $array2 = $array1; $array2[1] = 22; print_r($array1[1]); // Output is 22
Здесь $array2
не ссылается на $array1
, но как изменить значение в $array2
, изменив значение $array1
?
Если вы хотите, чтобы $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
Это происходит потому, что объекты всегда копируются по ссылке, а числа и строки копируются как есть.