The first instance has to be a reference. Otherwise you would only get a local copy. Consider this code:
$arr = array(1, 2, 3, 4);
foreach ($arr as $val)
$val = 5;
print_r($arr);
This code would still print 1,2,3,4 as you are not altering the values in the array, but a copy.
The same logic applies for the second instance. Without &, it would only assign the current value of the element.