#7578 [Com]: next() and current() do not return referenceing arrays
| From: | zhalassy at loginet dot hu | Date: | Mon, 14 Dec 2009 17:08:00 +0000 |
| Subject: | #7578 [Com]: next() and current() do not return referenceing arrays | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-145720@lists.php.net to get a copy of this message | ||
ID: 7578
Comment by: zhalassy at loginet dot hu
Reported By: mog at linux dot nu
Status: Open
Bug Type: Feature/Change Request
Operating System: RedHat Linux 7
PHP Version: 4.0.1pl2
New Comment:
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...
Previous Comments:
------------------------------------------------------------------------
[2000-11-05 06:19:55] stas@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] waldschrott@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/?id=7578&edit=1