From:             [EMAIL PROTECTED]
Operating system: Windows 98
PHP version:      4.0.6
PHP Bug Type:     Scripting Engine problem
Bug description:  Nested "foreach" (on the same array variable) don't work as should

I have a tree, which is loaded into a variable into the following
(hopefully self-explanatory) structure:

Array(
  [1] => Array ( [parentid] => 0, [name] => 1 )
  [2] => Array ( [parentid] => 0, [name] => 2 )
  [3] => Array ( [parentid] => 1, [name] => 1_1 )
  [4] => Array ( [parentid] => 3, [name] => 1_1_1 )
  [5] => Array ( [parentid] => 3, [name] => 1_1_2 )
  [6] => Array ( [parentid] => 4, [name] => 1_1_1_1 )
  [7] => Array ( [parentid] => 1, [name] => 1_2 )
  [8] => Array ( [parentid] => 7, [name] => 1_2_1 )
  [9] => Array ( [parentid] => 2, [name] => 2_1 )
) 

This results in the following three:
+ 1
 + 1_1
  + 1_1_1
   + 1_1_1_1
  + 1_1_2
 + 1_2
  + 1_2_1
+ 2
 + 2_1

I have the following recursive function to draw this tree:

function funktzia($base,$dir)
{
  foreach($dir as $id => $item)
  {
    if ($item[parentid]==$base)
    {
      echo "<UL>\n<LI>".$item[name]."</LI><BR>\n";
      funktzia($id,$dir);
      echo "</UL>\n";
    }
  }
}

where `$base' is the current tree node id, and `$dir' is the variable which
holds the tree, as described above.
The function is initially called "funktzia(0,$tree);", and the recursively
calls itself.

So far so good.
But if the `$dir' variable is a by-reference parameter (i.e. "[...] &$dir
[...]" instead of "[...] $dir [...]" as now), or it is defined global
within the function instead of being passed as a parameter (in either way,
all recursion level use the same variable) - it doesn't work.
It draw the tree only while going up levels, but stop when it's time to go
back to a lower level. Or in short, the following tree is drawn instead of
the full one:

+ 1
 + 1_1
  + 1_1_1
   + 1_1_1_1

It seems that when we go back to the lower "foreach" loop, the array
pointer it uses already points to the end of the array (since we just
finished doing a "foreach" loop on that array in the higher level).
-- 
Edit bug report at: http://bugs.php.net/?id=14607&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to