ID:               16227
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Bogus
+Status:           Analyzed
 Bug Type:         Arrays related
-Operating System: Tru64 UNIX 5.0a
+Operating System: ANY
-PHP Version:      4.0.6
+PHP Version:      4.2.0-dev
 Assigned To:      hholzgra
 New Comment:

Derick, 

foreach() does not solve this bug.
ZendEngine is resetting internal hash position by an
assignment. Therefore, foreach() does does not work.

i.e. The issue is _not_ "Not resetting hash posisiton", but
"Incorrectly resetting RVALUE hash position by an assignment".

This is serious flaw in language.



Previous Comments:
------------------------------------------------------------------------

[2002-03-23 06:01:49] [EMAIL PROTECTED]

Not a bug, but intended behavior. Use foreach().

Derick

------------------------------------------------------------------------

[2002-03-22 20:55:39] [EMAIL PROTECTED]

BTW, I haven't check the exact behavior.
Zend might be resetting internal hash position due to the
assignment. 

------------------------------------------------------------------------

[2002-03-22 20:48:18] [EMAIL PROTECTED]

I forgot about reset() since behavior is inconsistent :(

Anyway, this is still not right.
Zend engine is allocating new zval for $insidearray while
it should allocate $placeholder.
---
$placeholder = $insidearray;
               while(list(,$innerval) = each($insidearray)){
                       print "inloop $innerval for $outerval<br>";
---
This bug causes nasty bug in script.
If it is not easy to fix, may be we should suspend this bug?


------------------------------------------------------------------------

[2002-03-22 20:29:04] [EMAIL PROTECTED]

ever heard of reset() ?

------------------------------------------------------------------------

[2002-03-22 20:19:56] [EMAIL PROTECTED]

Thanks for reporting. I verified with 4.2.0-dev & 4.0.6.
This is _VERY_ bad bug...

[root@dev etc]# php
<?php
       $outsidearray = array("key1","key2");
       $insidearray = array("0","1");

           while(list(,$outerval) = each($outsidearray)){
               //$placeholder = $insidearray;
               while(list(,$innerval) = each($insidearray)){
                       print "inloop $innerval for $outerval<br>";
               }
       }
?>

inloop 0 for key1<br>
inloop 1 for key1<br>

[root@dev etc]# php
<?php
       $outsidearray = array("key1","key2");
       $insidearray = array("0","1");

           while(list(,$outerval) = each($outsidearray)){
$placeholder = $insidearray;
               while(list(,$innerval) = each($insidearray)){
                       print "inloop $innerval for $outerval<br>";
               }
       }
?>

inloop 0 for key1<br>
inloop 1 for key1<br>
inloop 0 for key2<br>
inloop 1 for key2<br>

[root@dev etc]# 
[root@dev etc]# php -v
4.2.0-dev


------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/16227

-- 
Edit this bug report at http://bugs.php.net/?id=16227&edit=1

Reply via email to