Поскольку во втором цикле $ v
по-прежнему является ссылкой на последний элемент массива, поэтому он каждый раз перезаписывается.
Вы можете увидеть это так:
$a = array ('zero','one','two', 'three');
foreach ($a as &$v) {
}
foreach ($a as $v) {
echo $v.'-'.$a[3].PHP_EOL;
}
Как видите, последний элемент массива принимает текущее значение цикла: «ноль», «один», «два», а затем просто «два» ... :)
Потому что если вы создаете ссылку на переменную, то все имена этой переменной (включая исходное) становятся ССЫЛКАМИ.