Intereting Posts
Как защитить файлы PHP от загрузки? PHP присваивает инструкции select выпадающим спискам Когда вам понадобится использовать позднюю статическую привязку? PHP: Загрузите входящую электронную почту из POP3 или IMAP, проанализируйте ее и пометьте как чтение / удаление на сервере Кодирование / декодирование URL-адресов PHP Intermittent simplexml_load_file (): предупреждение ввода-вывода на локальном сайте Joomla Как преобразовать динамически построенный запрос ext / mysql в подготовленный отчет PDO? Выбор большого количества строк из таблицы базы данных с помощью MySQL php OOP, полный образец Является ли действительный адрес электронной почты PayPal или нет (PHP) Установить / активировать расширение «intl» для PHP, запущенное MAMP Реализация фасада перед классом Factory Laravel 5.4 как выбрать mysql-запрос с иностранным языком? как передать переменную из шаблона php в javascript Как получить имя страницы Facebook или идентификатор страницы facebook с URL-адреса

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

Если вы хотите, чтобы $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 

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