#45369 [Opn->Csd]: $_SESSION-containing-arrays assignment to var does not correspond to manual

From: Date: Wed, 05 Nov 2008 10:54:08 +0000
Subject: #45369 [Opn->Csd]: $_SESSION-containing-arrays assignment to var does not correspond to manual
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-1356@lists.php.net to get a copy of this message
ID: 45369 Updated by: vrana@php.net -Summary: $_SESSION-containing-arrays assignment to var does not correspond to manual!! Reported By: thomas dot meike at nic dot at -Status: Open +Status: Closed Bug Type: Documentation problem Operating System: * PHP Version: 5.2.6 New Comment: This bug has been fixed in the documentation's XML sources. Since the online and downloadable versions of the documentation need some time to get updated, we would like to ask you to be a bit patient. Thank you for the report, and for helping us make our documentation better. I guess that the behavior changed in some historic version. So the documentation was originally correct. Previous Comments: ------------------------------------------------------------------------ [2008-07-02 09:31:09] jani@php.net Always a simple test is better than some excerpt from a huge app: # php -r '$a = array(1,2,3); next($a); $b = $a; var_dump(current($b));' int(2) So it seems the manual is wrong again. ------------------------------------------------------------------------ [2008-07-01 11:05:45] thomas dot meike at nic dot at >>You should reset() it "manually", I don't see any wrong behaviour >>here. yes, resetting it manually is always possible >>Where in the manual does it say that assiging to the "magic" >>$_SESSION >>superglobal the array is reset automatically?? I did not talk abount assignments to $_SESSION!!! the only thing i wanted to point out here is that now, assigning $_SESSION-containing array-constructs to any local variable does not work any more as it did before or lets say it does not correspond to the following part in the manual: http://www.php.net/manual/en/language.types.array.php Array assignment always involves value copying. It also means that the internal array pointer used by current() and similar functions is reset. Use the reference operator to copy an array by reference. ------------------------------------------------------------------------ [2008-07-01 09:49:12] jani@php.net You should reset() it "manually", I don't see any wrong behaviour here. Where in the manual does it say that assiging to the "magic" $_SESSION superglobal the array is reset automatically?? ------------------------------------------------------------------------ [2008-06-26 15:31:50] thomas dot meike at nic dot at Description: ------------ you define an array step through ONLY SOME elements using list-each structure stepping through you perform some changes on data finishing the while-structure the array is saved in session let's say, somewhere else in your businesslogic you need these session data once more: you initiate a variable with the recently saved session array the PROBLEM now: the variable is initiated with the array NOT RESETTED as defined in documentation an array assigned to a variable has to be resetted the problem exists also with php version 5.2.5 Reproduce code: --------------- session_start(); $arrL = array("test1","test2","test3","test4","test5","test6","test7","test8","test9","test10"); if(!isset($_SESSION['DATA'])){ $_SESSION['DATA']=$arrL; } $counter = 3; $arrSessData = $_SESSION['DATA']; while((list($index, $value) = each($arrSessData)) && ($counter > 0) ) { $arrSessData[$index] = '_test_' . $value; $counter--; } //store changes in session $_SESSION['DATA']=$arrSessData; //somewhere else within the businesslogic, init local variable and step through $arrSessDataProc = $_SESSION['DATA']; while((list($index, $value) = each($arrSessDataProc)) ){ echo "<br>" . $index . ' ' . $value; } Expected result: ---------------- 0 _test_test1 1 _test_test2 2 _test_test3 3 test4 4 test5 5 test6 6 test7 7 test8 8 test9 9 test10 Actual result: -------------- 4 test5 5 test6 6 test7 7 test8 8 test9 9 test10 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=45369&edit=1

« previous php.doc.bugs (#1356) next »