Bug #62901 [ReO]: foreach unexpectedly advances the internal array pointer

From: Date: Fri, 14 Sep 2012 02:56:51 +0000
Subject: Bug #62901 [ReO]: foreach unexpectedly advances the internal array pointer
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-173423@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=62901&edit=1

 ID:                 62901
 Updated by:         laruence@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] nikic@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] laruence@php.net

s ,write on copy, copy on write,  ;<

------------------------------------------------------------------------
[2012-09-13 02:44:38] laruence@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] laruence@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


Thread (12 messages)

« previous php.bugs (#173423) next »