Я снова наступил на эти грабли.
Пример кода:
$array = [1, 2, 3];
foreach ($array as &$value) {} // by reference
echo implode(',', $array), "\n";
foreach ($array as $value) {} // by value (i.e., copy)
echo implode(',', $array), "\n";
Результат:
1,2,3
1,2,2
Почему? По качану. Между первой и второй нужен unset($value);
.
Замечательный язык вообще. И отсутствие у переменных областей видимости уровня блока — отдельная победа на пути к говнокоду. Зато отлично учишься каждые 5 строк кода выносить в отдельную функцию.
PHP и JS, сладкий твикс страдания. JS, правда, боль-мень вылечили.
Спрашивайте ваши ответы.