Как изменить значение в $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

Это связано с тем, что объекты всегда копируются по ссылке, а числа и строки копируются как есть.

Другие вопросы по тегам