#33615 [Opn->Csd]: Foreach and arrays stored in session
| From: | sniper@php.net | Date: | Tue, 23 Aug 2005 11:25:03 +0000 |
| Subject: | #33615 [Opn->Csd]: Foreach and arrays stored in session | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-83899@lists.php.net to get a copy of this message | ||
ID: 33615
Updated by: sniper@php.net
Reported By: Wojciech dot Szela at gmail dot com
-Status: Open
+Status: Closed
Bug Type: Arrays related
Operating System: Windows XP Professional SP2
PHP Version: 5.0.4
Previous Comments:
------------------------------------------------------------------------
[2005-08-23 10:21:08] Wojciech dot Szela at gmail dot com
Work fine with CVS version.
------------------------------------------------------------------------
[2005-07-08 12:31:27] tony2001@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php5-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5-win32-latest.zip
------------------------------------------------------------------------
[2005-07-08 12:25:38] Wojciech dot Szela at gmail dot com
Description:
------------
1. Create array and store it in $_SESSION, eg.
2. Write method which goes trough all elements of new structure
searching for particular element (use foreach), and when founds it,
call very same function looking for other element. Take a look at a
code.
Work perfectly on Linux. On Windows function looses state (index) of
foreach, so you have to change line:
foreach($_SESSION['application'] as $key => $value) {
to
$foo = $_SESSION;
foreach($foo as $key => $value) {
Reproduce code:
---------------
$_SESSION['application'] = array(
array( 'name' => 'l1', 'symbol' => 'l1',
'father' => 'root'),
array( 'name' => 'l1-1', 'symbol' => 'l1-1',
'father' => 'l1'),
array( 'name' => 'l1-2', 'symbol' => 'l1-2',
'father' => 'l1'),
array( 'name' => 'l2', 'symbol' => 'l2',
'father' => 'root'),
);
function getTreeNodes($father) {
$ret = array();
foreach($_SESSION['application'] as $key => $value) {
if($value['father'] == $father) {
$child = array( 'symbol' => $key, 'name' =>
$value['name'], 'child' => array());
$child['child'] = $this->getTreeNodes($key);
$ret[] = $child;
}
}
return $ret;
}
$tree = array();
$tree[] = array( 'symbol' => 'root', 'name' =>
'Aplikacje', 'child' =>
array() );
$tree[0]['child'] = $this->getTreeNodes('root');
print_r($tree);
Expected result:
----------------
array of arrays (tree)
root
- l1
- l1-1
- l1-2
- l2
Actual result:
--------------
array of arrays (one branch)
root
- l1
- l1-1
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=33615&edit=1