ID: 16227 Updated by: [EMAIL PROTECTED] -Summary: Wrong zval allocation? while(list() = each()) behavior is inconsistent due to th Reported By: [EMAIL PROTECTED] -Status: Bogus +Status: Open -Bug Type: Arrays related +Bug Type: Documentation problem Operating System: ANY -PHP Version: 4.2.0-dev +PHP Version: PHP4 only New Comment:
Ok. Then this is documentation problem. (I would like to hear from Andi or Zeev, though) There should be note that internal hash position is reset if value is assigned. (Both LVALUE and RVLAUE. They are the same value anyway.) Also, reference counting side effect should be documented fully. BTW, to fix this misbihavior, we need a additional variable to keep track of hash position for each zval. (and change related codes) PHP3 does not have problem, since it does not have reference counting. Previous Comments: ------------------------------------------------------------------------ [2002-03-23 06:46:24] [EMAIL PROTECTED] It's not a flaw, it's designed like this. Derick ------------------------------------------------------------------------ [2002-03-23 06:39:14] [EMAIL PROTECTED] 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. ------------------------------------------------------------------------ [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? ------------------------------------------------------------------------ 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