Почему PHP перезаписывает значения, когда я повторяю этот массив дважды (по ссылке, по значению)

Если я перебираю массив дважды, один раз по ссылке, а затем по значению, PHP перезапишет последнее значение в массиве, если я использую одно и то же имя переменной для каждого цикла. Это лучше всего иллюстрируется на примере:

$array = range(1,5);
foreach($array as &$element)
{
  $element *= 2;
}
print_r($array);
foreach($array as $element) { }
print_r($array);

Выход:

Массив ([0] => 2 [1] => 4 [2] => 6 [3] => 8[4] => 10 )

Массив ([0] => 2 [1] => 4 [2] => 6 [3] => 8[4] => 8 )

Обратите внимание, что я не ищу исправления, я пытаюсь понять, почему это происходит. Также обратите внимание, что этого не происходит, если имена переменных в каждом цикле не вызываются$elementтак что я предполагаю, что это связано с$element по-прежнему находится в области видимости и ссылка после окончания первого цикла.

Ответы на вопрос(3)

Ваш ответ на вопрос