После первого цикла $ element по-прежнему является ссылкой на последний элемент / значение $ array.
Вы можете видеть это, когда вы используете var_dump () вместо print_r ()
array(5) {
[0]=>
int(2)
...
[4]=>
&int(2)
}
Обратите внимание, что & in &int(2)
.
Во втором цикле вы присваиваете значения элементу $. И поскольку это все еще ссылка, значение в массиве также изменяется. Попробуйте с
foreach($array as $element)
{
var_dump($array);
}
как второй цикл, и вы увидите.
Так что это более или менее так же, как
$array = range(1,5);
$element = &$array[4];
$element = $array[3];
// and $element = $array[4];
echo $array[4];
(только с циклами и умножением ... эй, я сказал "более или менее"; -))