On 16-08-2012 20:28, Tristan wrote:
Thanks for all your help. The answer was so simple in the end. Thanks Tim
for clearing that up!!! Perfect little script now for creating navigation.
Just feed it an array like posted at the bottom of this message.

function createTree(&$list, $parent){

     global $depth;

     $depth++; // Increment as we descend

     $tree = array();
//$depth = 0;
     foreach ($parent as $k=>$l){
$l['depth'] = $depth;
             $l['children'] = createTree($list, $list[$l['section_id']]);
         $tree[] = $l;

     $depth--; // Decrement as we ascend

     return $tree;

$arr = $dashSections;

$new = array();
foreach ($arr as $a){
     $new[$a['section_parent_id']][] = $a;

$depth = 0;

$tree = createTree($new, $new[0]);
//echo count($tree);

Tristan, using globals for such a thing is bound to bite you in the ass at some point. IMO it is a far better idea to include the depth as a parameter to createTree. So something like:

function createTree($list, $parent, $depth=0) {
   $tree = [];
   foreach($parent as $k=>$l) {
      $l['depth'] = ($depth+1);
      if(isset($list[$l['section_id']])) {
         $child = $list[$l['section_id']])l
         $l['children'] = createTree($list, $child, $depth+1);
      $tree[] = $l;

Now you don't have to remember to set $depth to anything, it just works out of the box. Having global variables floating around just makes it easy for them to get overwritten by accident, and then you'll be wondering why the hell your menus suddenly look weird when you haven't even touched them! ;)

- Tul

PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to