Edit report at http://bugs.php.net/bug.php?id=7578&edit=1
ID: 7578 Updated by: j...@php.net Reported by: mog at linux dot nu Summary: next() and current() do not return referenceing arrays -Status: Open +Status: Wont fix Type: Feature/Change Request -Package: Feature/Change Request +Package: *General Issues Operating System: RedHat Linux 7 PHP Version: 4.0.1pl2 Block user comment: N Private report: N New Comment: This is how it works. No way we should even consider changing it. Previous Comments: ------------------------------------------------------------------------ [2009-12-14 17:07:59] zhalassy at loginet dot hu This file is rather old (9 years? wow!)... What i can't do in PHP 5.2 currently is: $a = array(2,5,8); $e =& end($a); I have to do this instead: $a = array(2,5,8); end($a); $e =& $a[key($a)]; /* Overhead with an extra function call, and a key lookup */ It would be nice if current(), reset(), end(), next() and prev() would return references at least... ------------------------------------------------------------------------ [2000-11-05 06:19:55] s...@php.net There's no & operation in PHP. Thus, you cannot use it in expressions, including array(). There's =& operator and &$var syntax for passing variables by reference. Also, if language doesn't do what you need for a particular project, it's usually not good enough reason to change the language. Anyway, I move it to feature requests. ------------------------------------------------------------------------ [2000-11-02 22:12:58] mog at linux dot nu 1. yes, i have read the manual on references explained. 2. ok, array(&$array2) might not work but i can't see why. what if we make it like this? shouldn't this work or it should work like this if current(), reset(), prev() and next() were modified to return references instead. <?PHP $array = array(array(0,1,2)); print current(current($array))."<br>"; // returns 0 print "<b>Try 1!</b><br>"; print next(current($array))."<br>"; // returns 1, correct but the internal pointer is only moved in the copy current() returned print current(current($array))."<br>"; // returns 0, wrong, should be 1 print current($array[0])."<br>"; //returns 0, wrong, should be 1 print "<b>Try 2!</b><br>"; print next($array[0])."<br>"; print current(current($array))."<br>"; // returns 0, wrong, should be 1 print current($array[0])."<br>"; // returns 1, yes, correct! but the code above still didn't work! ?> I really think that this behaviour should be changed, i need it for a project i'm working with. ------------------------------------------------------------------------ [2000-11-01 19:43:52] waldschr...@php.net you simply can´t do it that way, please read the manual on foreach() etc. and that additional "&" in > $array = array(&$array2); has absolutely no effect here, at least not what you expect it to do (please also read "references explained") > print next(current($array))."<br>"; // returns 1, correct > but the internal > pointer is only moved in the copy current() returned sure, current($array) returns a copy and thus all results you´ve mentioned are fine ------------------------------------------------------------------------ [2000-11-01 19:29:27] mog at linux dot nu i hope you can see what is wrong in the code below <?PHP $array2 = array(0,1,2); $array = array(&$array2); print current(current($array))."<br>"; // returns 0 print "<b>Try 1!</b><br>"; print next(current($array))."<br>"; // returns 1, correct but the internal pointer is only moved in the copy current() returned print current(current($array))."<br>"; // returns 0, wrong, should be 1 print current($array2)."<br>"; //returns 0, wrong, should be 1 print "<b>Try 2!</b><br>"; print next($array[0])."<br>"; print current(current($array))."<br>"; // returns 0, wrong, should be 1 print current($array[0])."<br>"; // returns 1, yes, correct! but the code above still didn't work! ?> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=7578&edit=1