|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2013-12-11 14:36 UTC] felipe@php.net
-Status: Open
+Status: Assigned
-Assigned To:
+Assigned To: nikic
[2014-08-08 11:04 UTC] elliot at aanet dot com dot au
[2015-04-14 15:11 UTC] nikic@php.net
-Status: Assigned
+Status: No Feedback
[2015-04-14 15:11 UTC] nikic@php.net
[2015-04-14 15:11 UTC] nikic@php.net
-Status: No Feedback
+Status: Wont fix
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Dec 12 22:00:02 2025 UTC |
Description: ------------ Generator::current() does not support return value by reference. I note foreach operator works fine with yield result which passed by reference. The code below works normal: function &my_test(&$array) { foreach($array as $key => &$value) { yield $key => $value; } } $array = ['x1' => 1,'x2' => 2, 'x3' => 3,'x4' => 4]; foreach(my_test($array) as $key => &$value) { $value = $value + 10; echo "$key => $value\n"; } print_r($array); But when I use Generator::current() I get a different result. On the other hand Generator::current() does not have to return value by reference. But there must be another way to do it. Test script: --------------- function &my_test(&$array) { foreach($array as $key => &$value) { yield $key => $value; } } $array = ['x1' => 1,'x2' => 2, 'x3' => 3,'x4' => 4]; $generator = my_test($array); while($generator->valid()) { $value = $generator->current(); $key = $generator->key(); $value = $value + 10; echo "$key => $value\n"; $generator->next(); } print_r($array); Expected result: ---------------- x1 => 11 x2 => 12 x3 => 13 x4 => 14 Array ( [x1] => 11 [x2] => 12 [x3] => 13 [x4] => 14 ) Actual result: -------------- x1 => 11 x2 => 12 x3 => 13 x4 => 14 Array ( [x1] => 1 [x2] => 2 [x3] => 3 [x4] => 4 )