PHP ссылки, странное явление, кто-то может объяснить? - PullRequest
1 голос
/ 02 ноября 2010

PHP, 5.3 не поточное безопасное окно, также проверено на PHP 5.2.9 на linux.

Пример кода:

$test1 = array(
            array("val"=>"a"),
            array("val"=>"b"),
            array("val"=>"c")
          );


foreach($test1 as $key => $test)
{
    echo $test['val'] . "\n";
}
foreach($test1 as $key => &$test)
{
    echo $test['val'] . "\n";
}
foreach($test1 as $key => $test)
{
    echo $test['val'] . "\n";
}

выход:

a
b
c
a
b
c
a
b
b

Ожидаемый результат:

a
b
c
a
b
c
a
b
c

Так что же происходит? Моей первой мыслью было, что указатель массива был как-то задействован ... он не reset ничего не делал. Тогда я подумал, что ссылка как-то меняет значения, но нет, если я запусту его снова с &test вместо последнего, ожидаемый результат будет получен, однако после первого цикла, использующего ссылку, любой цикл БЕЗ ссылки изменится последнее значение .... это оставляет меня полностью в тупике. Кто-нибудь может дать мне объяснение?

1 Ответ

4 голосов
/ 02 ноября 2010

Если вы выполняете цикл по ссылке, отключите ($ test), иначе ссылка все еще существует.

foreach($test1 as $key => &$test) 
{ 
    echo $test['val'] . "\n"; 
} 
unset($test);

Это поведение хорошо документировано

Внимание! Ссылка на $ value и последний элемент массива остаются даже после цикла foreach. Рекомендуется уничтожить его с помощью unset ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...