Edit report at https://bugs.php.net/bug.php?id=62901&edit=1
ID: 62901 Updated by: larue...@php.net Reported by: david at grudl dot com Summary: foreach unexpectedly advances the internal array pointer Status: Re-Opened Type: Bug Package: Variables related PHP Version: 5.4.6 -Assigned To: +Assigned To: laruence Block user comment: N Private report: N New Comment: @nikic, after we discussed yesterday, I re-through the codes, do find a *inconsistent* place, assign to myself, thanks Previous Comments: ------------------------------------------------------------------------ [2012-09-13 16:19:15] ni...@php.net @laruence: Changing the array pointer is a change too. That's why foreach usually copies the passed array. So yes, this is a bug, but from a quick glance at the code I can't yet see why it happens. ------------------------------------------------------------------------ [2012-09-13 02:45:16] larue...@php.net s ,write on copy, copy on write, ;< ------------------------------------------------------------------------ [2012-09-13 02:44:38] larue...@php.net the same, although it is *copy* of a array, but still the same zval, PHP using "write on copy". but the internalPointer's change is not considered as "write" here. ------------------------------------------------------------------------ [2012-09-13 01:51:19] david at grudl dot com The point is: the iteration is not started on $this->arr, but it is started on array returned from method getArr(). Foreach resets internal array pointer of completely different array. ------------------------------------------------------------------------ [2012-08-24 02:51:39] larue...@php.net "When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. " that means foreach change the internal potinter of an array. http://us3.php.net/manual/en/control-structures.foreach.php ------------------------------------------------------------------------ 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 https://bugs.php.net/bug.php?id=62901 -- Edit this bug report at https://bugs.php.net/bug.php?id=62901&edit=1