[PHP-DOC] #8353 [Opn-Csd]: foreach modify array pointer

2002-11-30 Thread pollita
 ID:  8353
 Updated by:  [EMAIL PROTECTED]
 Reported By: [EMAIL PROTECTED]
-Status:  Open
+Status:  Closed
 Bug Type:Documentation problem
 PHP Version: 4.4.0-dev
 Assigned To: philip
 New Comment:

This bug has been fixed in CVS.

In case this was a PHP problem, snapshots of the sources are packaged
every three hours; this change will be in the next snapshot. You can
grab the snapshot at http://snaps.php.net/.
 
In case this was a documentation problem, the fix will show up soon at
http://www.php.net/manual/.

In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites in short time.
 
Thank you for the report, and for helping us make PHP better.

Modified Note re: Works on a Copy


Previous Comments:


[2002-11-28 11:42:45] [EMAIL PROTECTED]

The foreach() page will be updated and made more clear on this
behavior.  Regarding the pointer, foreach() indeed behaves like
while/each() (except for the initial reset) and moves the pointer past
the end.  So although it provides a copy to work with it still affects
the original arrays pointer!



[2002-11-27 10:32:33] [EMAIL PROTECTED]

As I've been taught, foreach doesn't affect the pointer as it merely
works on a copy.  Also, the following note exists in the foreach()
entry of the manual and has for over two years:

Note:  Also note that foreach operates on a copy of the specified
array, not the array itself, therefore the array pointer is not
modified as with the each()  construct and changes to the array element
returned are not reflected in the original array. 

That was added by Sterling here:

http://cvs.php.net/diff.php/phpdoc/en/language/control-structures.xml?login=2r1=1.9r2=1.10ty=h


Everyone assumes foreach works on a copy and only a copy.  IMHO each()
isn't a fair comparison because it doesn't work on a copy.



[2002-11-24 23:10:40] [EMAIL PROTECTED]

IMO this is not a bug. Foreach works virtually like while + each
combination, with a few exceptions such as not requiring a reset()
prior to execution since it does not care about the current position in
the array.
As far as current(), next() and simular are concerned,
while (each($arr)); == foreach ($arr as $v);, once the loops are
complete current() will return FALSE. This IMO is a consistent
behaviour and is definately not a bug. I believe this is merely a
documentation issue.



[2002-11-21 15:21:34] [EMAIL PROTECTED]

foreach essentially REMOVES the array pointer alltogether on the
original array.

$arr = array('a','b'); foreach ($arr as $v); var_dump( current($arr)
);
$arr = array('a','b'); foreach ($arr as $v); reset($arr); var_dump(
current($arr) );

Results:
bool(false)
string(1) a

Using key() instead of current() results in NULL instead of false. 
Where did the pointer go?

Conclusion:
Either foreach() has a feature that removes the array pointer from the
original array or it's a bug.  If it's seen as a feature please explain
why so it can be documented.



[2001-03-09 21:32:57] [EMAIL PROTECTED]

no feedback.




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/8353

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


-- 
PHP Documentation Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP-DOC] #8353 [Opn-Csd]: foreach modify array pointer

2002-11-30 Thread Philip Olson


Please don't close assigned bugs, I was working on this.


On 30 Nov 2002 [EMAIL PROTECTED] wrote:

  ID:  8353
  Updated by:  [EMAIL PROTECTED]
  Reported By: [EMAIL PROTECTED]
 -Status:  Open
 +Status:  Closed
  Bug Type:Documentation problem
  PHP Version: 4.4.0-dev
  Assigned To: philip
  New Comment:
 
 This bug has been fixed in CVS.
 
 In case this was a PHP problem, snapshots of the sources are packaged
 every three hours; this change will be in the next snapshot. You can
 grab the snapshot at http://snaps.php.net/.
  
 In case this was a documentation problem, the fix will show up soon at
 http://www.php.net/manual/.
 
 In case this was a PHP.net website problem, the change will show
 up on the PHP.net site and on the mirror sites in short time.
  
 Thank you for the report, and for helping us make PHP better.
 
 Modified Note re: Works on a Copy
 
 
 Previous Comments:
 
 
 [2002-11-28 11:42:45] [EMAIL PROTECTED]
 
 The foreach() page will be updated and made more clear on this
 behavior.  Regarding the pointer, foreach() indeed behaves like
 while/each() (except for the initial reset) and moves the pointer past
 the end.  So although it provides a copy to work with it still affects
 the original arrays pointer!
 
 
 
 [2002-11-27 10:32:33] [EMAIL PROTECTED]
 
 As I've been taught, foreach doesn't affect the pointer as it merely
 works on a copy.  Also, the following note exists in the foreach()
 entry of the manual and has for over two years:
 
 Note:  Also note that foreach operates on a copy of the specified
 array, not the array itself, therefore the array pointer is not
 modified as with the each()  construct and changes to the array element
 returned are not reflected in the original array. 
 
 That was added by Sterling here:
 
 
http://cvs.php.net/diff.php/phpdoc/en/language/control-structures.xml?login=2r1=1.9r2=1.10ty=h
 
 Everyone assumes foreach works on a copy and only a copy.  IMHO each()
 isn't a fair comparison because it doesn't work on a copy.
 
 
 
 [2002-11-24 23:10:40] [EMAIL PROTECTED]
 
 IMO this is not a bug. Foreach works virtually like while + each
 combination, with a few exceptions such as not requiring a reset()
 prior to execution since it does not care about the current position in
 the array.
 As far as current(), next() and simular are concerned,
 while (each($arr)); == foreach ($arr as $v);, once the loops are
 complete current() will return FALSE. This IMO is a consistent
 behaviour and is definately not a bug. I believe this is merely a
 documentation issue.
 
 
 
 [2002-11-21 15:21:34] [EMAIL PROTECTED]
 
 foreach essentially REMOVES the array pointer alltogether on the
 original array.
 
 $arr = array('a','b'); foreach ($arr as $v); var_dump( current($arr)
 );
 $arr = array('a','b'); foreach ($arr as $v); reset($arr); var_dump(
 current($arr) );
 
 Results:
 bool(false)
 string(1) a
 
 Using key() instead of current() results in NULL instead of false. 
 Where did the pointer go?
 
 Conclusion:
 Either foreach() has a feature that removes the array pointer from the
 original array or it's a bug.  If it's seen as a feature please explain
 why so it can be documented.
 
 
 
 [2001-03-09 21:32:57] [EMAIL PROTECTED]
 
 no feedback.
 
 
 
 
 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/8353
 
 -- 
 Edit this bug report at http://bugs.php.net/?id=8353edit=1
 
 
 -- 
 PHP Documentation Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php
 


-- 
PHP Documentation Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP-DOC] #8353 [Opn-Csd]: foreach modify array pointer

2002-11-30 Thread Gabor Hojtsy
As far as I have seen, Sara added the needed content to the foreach docs.
Is there anything else you would like to add?

Goba

 Please don't close assigned bugs, I was working on this.


 On 30 Nov 2002 [EMAIL PROTECTED] wrote:

   ID:  8353
   Updated by:  [EMAIL PROTECTED]
   Reported By: [EMAIL PROTECTED]
  -Status:  Open
  +Status:  Closed
   Bug Type:Documentation problem
   PHP Version: 4.4.0-dev
   Assigned To: philip
   New Comment:
 
  This bug has been fixed in CVS.
 
  In case this was a PHP problem, snapshots of the sources are packaged
  every three hours; this change will be in the next snapshot. You can
  grab the snapshot at http://snaps.php.net/.
 
  In case this was a documentation problem, the fix will show up soon at
  http://www.php.net/manual/.
 
  In case this was a PHP.net website problem, the change will show
  up on the PHP.net site and on the mirror sites in short time.
 
  Thank you for the report, and for helping us make PHP better.
 
  Modified Note re: Works on a Copy
 
 
  Previous Comments:
  
 
  [2002-11-28 11:42:45] [EMAIL PROTECTED]
 
  The foreach() page will be updated and made more clear on this
  behavior.  Regarding the pointer, foreach() indeed behaves like
  while/each() (except for the initial reset) and moves the pointer past
  the end.  So although it provides a copy to work with it still affects
  the original arrays pointer!
 
  
 
  [2002-11-27 10:32:33] [EMAIL PROTECTED]
 
  As I've been taught, foreach doesn't affect the pointer as it merely
  works on a copy.  Also, the following note exists in the foreach()
  entry of the manual and has for over two years:
 
  Note:  Also note that foreach operates on a copy of the specified
  array, not the array itself, therefore the array pointer is not
  modified as with the each()  construct and changes to the array element
  returned are not reflected in the original array.
 
  That was added by Sterling here:
 
 
http://cvs.php.net/diff.php/phpdoc/en/language/control-structures.xml?login=
2r1=1.9r2=1.10ty=h
 
  Everyone assumes foreach works on a copy and only a copy.  IMHO each()
  isn't a fair comparison because it doesn't work on a copy.
 
  
 
  [2002-11-24 23:10:40] [EMAIL PROTECTED]
 
  IMO this is not a bug. Foreach works virtually like while + each
  combination, with a few exceptions such as not requiring a reset()
  prior to execution since it does not care about the current position in
  the array.
  As far as current(), next() and simular are concerned,
  while (each($arr)); == foreach ($arr as $v);, once the loops are
  complete current() will return FALSE. This IMO is a consistent
  behaviour and is definately not a bug. I believe this is merely a
  documentation issue.
 
  
 
  [2002-11-21 15:21:34] [EMAIL PROTECTED]
 
  foreach essentially REMOVES the array pointer alltogether on the
  original array.
 
  $arr = array('a','b'); foreach ($arr as $v); var_dump( current($arr)
  );
  $arr = array('a','b'); foreach ($arr as $v); reset($arr); var_dump(
  current($arr) );
 
  Results:
  bool(false)
  string(1) a
 
  Using key() instead of current() results in NULL instead of false.
  Where did the pointer go?
 
  Conclusion:
  Either foreach() has a feature that removes the array pointer from the
  original array or it's a bug.  If it's seen as a feature please explain
  why so it can be documented.
 
  
 
  [2001-03-09 21:32:57] [EMAIL PROTECTED]
 
  no feedback.
 
 
  
 
  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/8353
 
  --
  Edit this bug report at http://bugs.php.net/?id=8353edit=1
 
 
  --
  PHP Documentation Mailing List (http://www.php.net/)
  To unsubscribe, visit: http://www.php.net/unsub.php
 


 --
 PHP Documentation Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php





-- 
PHP Documentation Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP-DOC] #8353 [Opn-Csd]: foreach modify array pointer

2002-11-30 Thread Philip Olson


 On Sat, 30 Nov 2002, Gabor Hojtsy wrote:
 As far as I have seen, Sara added the needed content to the 
 foreach docs. Is there anything else you would like to add?

That's not the point.  The point is this bug was assigned
as of two days ago and we have an assigned bug system for 
a reason.  There are about 90 or so unassigned bugs out 
there...

I'm not bitter, but this just means pointless double work 
and I'd rather not see this happen in the future unless of
course an assigned bug remains open for, oh, a month or so.
Then at that point email the assignee.  A few extra days 
isn't going to kill anyone.

Regards,
Philip


-- 
PHP Documentation Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php