Как изменить значение в $array2 без обращения к $array1?
Рассмотрим следующий сегмент кода 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 ответ
Если ты хочешь $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
Это связано с тем, что объекты всегда копируются по ссылке, а числа и строки копируются как есть.