I have this PHP code:
$array = [1, 2, 3];
$counter = 0;
foreach($array as &$elem){
test();
$counter++;
if($counter >= 10){
return;
}
}
function test(){
global $array;
foreach($array as $key => $element){
echo $element;
$test = &$array[$key];
}
}
For some reason, the output of this code is 123123123123123123123123123123 and not 123123123 what I would expect. Because the array has three elements, I would expect the test() function to be called 3 times.
The foreach loop in the test function somehow resets the internal array pointer causing the outside loop to start with 1 again. Why is this?
I've already looked at How does PHP 'foreach' actually work?, which explains a great deal. But since I'm not changing the array, I don't understand the issue. Or is this a bug in PHP?
Note: This question is not a duplicate of Strange behavior of foreach when using reference: foreach ($a as &$v) { ... } because the two foreach loops are not in the same scope and the issue is not with the reference element being overwritten.
foreachin function resets the array's internal iterator and each step of theforeachoutside of function actually starts from the start again.