From:             plasticlobster at gmail dot com
Operating system: Debian
PHP version:      5.2.11
PHP Bug Type:     Arrays related
Bug description:  foreach by reference followed by foreach not by reference - 
Unexpected Results

Description:
------------
Running two foreach loops on different parts of the same array, one by
reference, one not causes unexpected results.

Reproduce code:
---------------
$foo = array(1,2,3,4,5);

foreach ($foo as $key => &$val) {
   $val++;
}

foreach ($foo as $key => $val) {
   echo $val;
}

Expected result:
----------------
Expected result is:
23456

Actual result:
--------------
Actual Result is:
23455

This is duplicate of bug #47388 which was dismissed without investigation.
The problem here is two-fold:

1. The scope of foreach should not extend beyond a foreach loop.
2. $val should be re-initialized as a VALUE, not a REFERENCE.

It looks like the second foreach is doing something comparable to $val =
$foo[0]. It should be calling unset($val) prior to assigning anything to
it. This is like going into a for loop and finding out that your explicit
value for the incrementor variable didn't get set because you had used it
in a previous for loop.

I would have commented on #47388, but comments were disabled as it was
abruptly closed.

When deciding whether or not to accept this as a bug, please keep in mind
that the current implementation serves no programmatic purpose and that the
proposed implementation is not only more intuitive/expected, but also
serves a purpose.

-- 
Edit bug report at http://bugs.php.net/?id=50485&edit=1
-- 
Try a snapshot (PHP 5.2):            
http://bugs.php.net/fix.php?id=50485&r=trysnapshot52
Try a snapshot (PHP 5.3):            
http://bugs.php.net/fix.php?id=50485&r=trysnapshot53
Try a snapshot (PHP 6.0):            
http://bugs.php.net/fix.php?id=50485&r=trysnapshot60
Fixed in SVN:                        
http://bugs.php.net/fix.php?id=50485&r=fixed
Fixed in SVN and need be documented: 
http://bugs.php.net/fix.php?id=50485&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=50485&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=50485&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=50485&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=50485&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=50485&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=50485&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=50485&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=50485&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=50485&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=50485&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=50485&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=50485&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=50485&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=50485&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=50485&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=50485&r=mysqlcfg

Reply via email to