Possible foreach bug; seeking advice to isolate the problem

From: Date: Wed, 20 Oct 2010 03:47:35 +0000
Subject: Possible foreach bug; seeking advice to isolate the problem
Groups: php.general 
Request: Send a blank email to php-general+get-308874@lists.php.net to get a copy of this message
I've got a script which originally contained the following piece of code: foreach ( $objs as $obj ) { do_some_stuff($obj); } When I tested it, I found that on every iteration of the loop the last element of $objs was assigned the value of the current element. I was able to step through the loop and watch this happening, element by element. I originally encountered this problem using PHP v5.2.4 under Windows XP. I later reproduced it in v5.3.2 under XP. The function call wasn't doing it. I replaced the function call with an echo statement and got the same result. For my immediate needs, I evaded the problem by changing the foreach loop to a for loop that references elements of $objs by subscript. That leaves me with the question: what is going wrong with foreach? I'm trying to either demonstrate that it's my error, not the PHP engine's, or isolate the problem in a small script that I can submit with a bug report. The current script isn't suitable for that because it builds $objs by reading a database table and doing some rather elaborate manipulations of the data. I tried to eliminate the database by doing a var_export of the array after I built it, then assigning the exported expression to a variable immediately before the foreach. That "broke the bug" -- the loop behaved correctly. There's a report of a bug that looks similar in the comments section of php.net's manual page for foreach, time stamped 09-Jul-2009 11:50. As far as I can tell it was never submitted as a bug and was never resolved. I sent an inquiry to the author but he didn't respond. Can anyone make suggestions on this -- either insights into what's wrong, or suggestions for producing a portable, reproducible example?

« previous php.general (#308874) next »