$arr = array(1,2,3,4,5,6); foreach($arr as $v){ $arr[] = 1; echo $v; }
output: 123456
$arr = array(1,2,3,4,5,6); foreach($arr as &$v){ $arr[] = 1; echo $v; }
output: 1234561111111111111111111111111111111111111111111111…
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 32 bytes) in /Users/gradzinski/dev/playground/foreach.php on line 7
So within the foreach loop we are adding 1 to referenced array arr
and this is why we are failing into infinite loop.
Below you can find PHP foreach manual explanation that may put some light in that behaviour.
Referencing $value is only possible if the iterated array can be referenced (i.e. if it is a variable). The following code won’t work:
<?php foreach (array(1, 2, 3, 4) as &$value) { $value = $value * 2; } ?>