Intereting Posts
Как я могу вызвать функцию ReflectionFunction, закрывающую закрытие, которое использует $ this? Получить родительскую категорию для страницы продукта Opencart Можно ли установить лимит в выпадающем списке с несколькими выборами? REGEX: захватывать все до определенного слова PHP – не удалось открыть поток: нет такого файла или каталога в Как создать динамические / дружественные URL-адреса с помощью PHP? номер порта сервера mysql Какую почтовую службу я должен использовать для проверки отправки писем? Арабские символы в декодировании JSON Является ли дизайн PHP, Python, PostgreSQL подходящим для бизнес-приложения? Класс шаблона, не связанный с str_replace Решение головоломки: поиск всех слов в расширенном Word в PHP Как разбить эту строку на массив? Как скопировать файлы CSS и JS в папку поставщика композитора? API PayPal Rest: как отключить регистрацию / оплату с помощью диалогового окна кредитных карт при экспресс-выписке

Ошибка смещения массива в PHP

$arr = array(1); $a = & $arr[0]; $arr2 = $arr; $arr2[0]++; echo $arr[0],$arr2[0]; // Output 2,2 

Не могли бы вы помочь мне, как это возможно?

Однако обратите внимание, что ссылки внутри массивов потенциально опасны. Выполнение нормального (не по ссылке) присваивания с помощью ссылки с правой стороны не превращает левую сторону в ссылку, но ссылки внутри массивов сохраняются в этих нормальных назначениях. Это также относится к вызовам функций, где массив передается по значению.

 /* Assignment of array variables */ $arr = array(1); $a =& $arr[0]; //$a and $arr[0] are in the same reference set $arr2 = $arr; //not an assignment-by-reference! $arr2[0]++; /* $a == 2, $arr == array(2) */ /* The contents of $arr are changed even though it's not a reference! */ 
 $arr = array(1);//creates an Array ( [0] => 1 ) and assigns it to $arr $a = & $arr[0];//assigns by reference $arr[0] to $a and thus $a is a reference of $arr[0]. //Here $arr[0] is also replaced with the reference to the actual value ie 1 $arr2 = $arr;//assigns $arr to $arr2 $arr2[0]++;//increments the referenced value by one echo $arr[0],$arr2[0];//As both $aar[0] and $arr2[0] are referencing the same block of memory so both echo 2 // Output 22 

Похоже, что $ arr [0] и $ arr2 [0] указывают на одну и ту же выделенную память, поэтому, если вы увеличиваете один из указателей, int будет увеличиваться в памяти

Ссылка Есть ли указатели в php?