#50485 [NEW]: foreach by reference followed by foreach not by reference - Unexpected Results
| From: | plasticlobster at gmail dot com | Date: | Wed, 16 Dec 2009 00:33:09 +0000 |
| Subject: | #50485 [NEW]: foreach by reference followed by foreach not by reference - Unexpected Results | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-145765@lists.php.net to get a copy of this message | ||
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