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
вместо последнего, ожидаемый результат будет получен, однако после первого цикла, использующего ссылку, любой цикл БЕЗ ссылки изменится последнее значение .... это оставляет меня полностью в тупике. Кто-нибудь может дать мне объяснение?