Edit report at http://bugs.php.net/bug.php?id=54321&edit=1
ID: 54321 Updated by: il...@php.net Reported by: unokpasabaxaki at yahoo dot es Summary: Foreach not running through added elements when passed by reference -Status: Open +Status: Bogus Type: Bug Package: *Programming Data Structures PHP Version: 5.2.17 Block user comment: N Private report: N New Comment: Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php foreach makes a copy of the array to run through, any changes to that array within the scope of foreach() construct are not visible to it. Previous Comments: ------------------------------------------------------------------------ [2011-03-20 13:45:06] unokpasabaxaki at yahoo dot es Description: ------------ I found out that foreach sometimes doesn't run through elements added to an array when the value is passed by reference. I haven't tested enough to say it for sure, but I think it happens only on elements added on what would be the last iteration of foreach. Test script: --------------- $array = array('a', 'b', 'c'); foreach ($array as $i => &$val) { echo $val.' '; if ($i % 2 == 1) $array[] = $val.'2'; } Expected result: ---------------- When it reaches $array[1] (b), it creates $array[3] with the value "b2". Then it runs through $array[3] and creates $array[4] with the value "b22". After that, it should run through $array[4] too, outputting altogether "a b c b2 b22" and stopping. Actual result: -------------- Since at the start of the iteration, $array[3] is the last element of the array, after $array[4] is created in that iteration, it doesn't run through it, outputting just "a b c b2". Still, $array[4] is created. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=54321&edit=1