bucle foreach y referencia de & $ value

¿Por qué un bucle foreach vacío puede cambiar el resultado?

Tengo el siguiente código:

$variable = [1,2,3,4];
foreach ($variable  as $key => &$value) 
  $value ++;

var_dump($variable);

El resultado que obtengo es:

array (size=4)
  0 => int 2
  1 => int 3
  2 => int 4
  3 => &int 5

Ahora, cuando agrego un bucle foreach vacío como este:

$variable  = [1,2,3,4];
foreach ($variable  as $key => &$value) 
  $value ++;

foreach ($variable  as $key => $value);
  var_dump($variable);

Entiendo esto :

array (size=4)
  0 => int 2
  1 => int 3
  2 => int 4
  3 => &int 4

¿Alguien puede explicarme por qué el último elemento no cambia cuando agrego el segundo bucle vacío, y por qué hay un & delante del último elemento?

Respuestas a la pregunta(6)

Su respuesta a la pregunta