Re: Display Array Tree as Menu - Can't figure out how to find depth with something over 2 levels : ANSWERED

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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;
        if(isset($list[$l['section_id']])){
            $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;
}

// CREATE THE TREE
$depth = 0;

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




On Thu, Aug 16, 2012 at 12:05 PM, Tristan <sunnrunner@xxxxxxxxx> wrote:

> Thanks David, Here's my tree creation. I'm trying to either put depth
> count on each array or run through the tree and figure it out after. I just
> can't figure out where to put it :D
>
> Great very lightweight script to create a tree from parent id and id if
> you want to save this one for yourself btw.
>
> function createTree(&$list, $parent){
>     $tree = array();
> //$depth = 0;
>     foreach ($parent as $k=>$l){
>  //echo $k.'<br />';
>         if(isset($list[$l['section_id']])){
> //echo $k.'<br />';
>  $l['depth'] = $k;
>             $l['children'] = createTree($list, $list[$l['section_id']]);
>         } else {
>  $l['depth'] = 0;
> }
>         $tree[] = $l;
>     }
>     return $tree;
> }
>
> $arr = $dashSections;
>
> $new = array();
> foreach ($arr as $a){
>     $new[$a['section_parent_id']][] = $a;
> }
>
> // CREATE THE TREE
> $tree = createTree($new, $new[0]);
> //echo count($tree);
> //print_r($tree);
>
>
>
> On Thu, Aug 16, 2012 at 11:36 AM, David OBrien <dgobrien@xxxxxxxxx> wrote:
>
>> On Thu, Aug 16, 2012 at 12:40 PM, Tristan <sunnrunner@xxxxxxxxx> wrote:
>>
>>> I can't for the life of me figure out how to find the depth of the array
>>> that I'm looping through to output tabs or indentations to the display
>>> for
>>> each depth. The entries also have section postition if you can figure out
>>> how to include that within each depth of the results I will buy you a
>>> case
>>> of beer.
>>>
>>> I was hoping to do something like...
>>>
>>> foreach($trees as $tree){
>>>     if($tree['current_depth'] == 0){
>>> echo $tree['menu_item'];
>>>     } else if($tree['current_depth'] == 1){
>>> echo 'indentation'.$tree['menu_item'];
>>>     } else if($tree['current_depth'] == 2){
>>> echo 'indentation - indentation'.$tree['menu_item'];
>>>     }
>>> }
>>>
>>>
>>> Or maybe even like this...
>>>
>>> foreach($trees as $tree){
>>> // output &nbsp; the amount of times current_depth equals
>>> echo str_repeat("&nbsp;", $tree['current_depth'])
>>> }
>>>
>>> I have my $tree structure as:
>>>
>>> [16] => Array
>>>     (
>>>         [section_id] => 21
>>>         [section_parent_id] => 0
>>>         [section_pos] => 30
>>>         [section_name] => Resource Center
>>>         [has_order] => 1
>>>         [section_has_hierarchy] => 1
>>>         [total_entries] => 35
>>>         [children] => Array
>>>             (
>>>                 [0] => Array
>>>                     (
>>>                         [section_id] => 38
>>>                         [section_parent_id] => 21
>>>                         [section_pos] => 31
>>>                         [section_name] => Resource Center
>>>                         [has_order] => 1
>>>                         [section_has_hierarchy] => 1
>>>                         [total_entries] => 35
>>>                         [children] => Array
>>>
>>>                             (
>>>                                 [0] => Array
>>>                                     (
>>>                                         [section_id] => 39
>>>                                         [section_parent_id] => 38
>>>                                         [section_pos] => 32
>>>                                         [section_name] => Resource Center
>>>                                         [has_order] => 1
>>>                                         [section_has_hierarchy] => 1
>>>                                         [total_entries] => 35
>>>                                     )
>>>
>>>                                 [1] => Array
>>>                                     (
>>>                                         [section_id] => 40
>>>                                         [section_parent_id] => 38
>>>                                         [section_pos] => 33
>>>                                         [section_name] => Resource Center
>>>                                         [has_order] => 1
>>>                                         [section_has_hierarchy] => 1
>>>                                         [total_entries] => 35
>>>                                     )
>>>                             )
>>>
>>>
>>>
>>>
>>> [19] => Array
>>>     (
>>>         [section_id] => 26
>>>         [section_parent_id] => 0
>>>         [section_pos] => 45
>>>         [section_name] => Resource Center
>>>         [has_order] => 1
>>>         [section_has_hierarchy] => 1
>>>         [total_entries] => 55
>>>         [children] => Array
>>>             (
>>>                 [0] => Array
>>>                     (
>>>                         [section_id] => 27
>>>                         [section_parent_id] => 26
>>>                         [section_pos] => 46
>>>                         [section_name] => Newsletters Intro
>>>                         [has_order] => 0
>>>                         [section_has_hierarchy] => 1
>>>                         [total_entries] => 1
>>>                     )
>>>
>>>             )
>>>
>>>     )
>>>
>>
>>
>> maybe something like this
>>
>> in the foreach
>> if parent = 0 then level = 0;
>> if haschilden is true increment level;
>>
>>
>

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux