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