There are a couple of ways to go about buiding and recursing "trees" in PHP. Utilizing functions to do it is one route.

The more object-oriented route would be to build a tree structure around SPL's RecursiveIterator, and RecursiveIteratorIterator.

A component in Zend Framework that does this is Zend_Navigation. It can have infinitely deep nodes.

http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Navigation.php
http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Navigation/

Another component to look at is Zend_Tool_Project_Profile. This creates a Tree based off an xml file that can then be searched and iterated.

http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Tool/Project/

It might take some time to wrap your head around RI and RII, but in the end you might find its worth it to have each node as an object. I makes your "tree" code more maintainable.

-ralph

shahrzad khorrami wrote:

hi all,

I want to create an array from another array to create json file in my format and pass it to a js library....ok. I just know that I have to use recursive function... but how? it's hard for me to create the new array..

main array:

Array
(
    [0] => Array
        (
            [nid] => 1
            [parentID] => 0
            [text] => Dashboard
            [cls] => x-btn-icon
            [icon] => lib/extjs/resources/images/default/icon/Dashboard.png
            [singleClickExpand] => 1
            [leaf] => 0
            [id] => Dashboard
        )

    [1] => Array
        (
            [nid] => 2
            [parentID] => 1
            [text] => Dashboard
            [cls] => firstExpanded
            [icon] => lib/extjs/resources/images/default/tree/s.gif
            [singleClickExpand] => 1
            [leaf] => 0
            [id] =>
        )

    [2] => Array
        (
            [nid] => 3
            [parentID] => 2
            [text] => Dashboard
            [cls] => x-btn-icon
            [icon] => lib/extjs/resources/images/default/tree/s.gif
            [singleClickExpand] => 1
            [leaf] => 1
            [id] => dashboard
        )
...........


---------------------- The array I want to create: ----------------

    [0] => Array
        (
            [nid] => 1
            [parentID] => 0
            [text] => Dashboard
            [cls] => x-btn-icon
            [icon] => lib/extjs/resources/images/default/icon/Dashboard.png
            [singleClickExpand] => 1
            [leaf] => 0
            [id] => Dashboard
            [children] =>     Array(
                         [0] => Array
                                    (
                                    [nid] => 2
                                    [parentID] => 1
                                    [text] => Dashboard
                                    [cls] => firstExpanded
[icon] => lib/extjs/resources/images/default/tree/s.gif
                                    [singleClickExpand] => 1
                                    [leaf] => 0
[id] => [children] => Array(
                                            [0] => Array
                                                    (
                                                      [nid] => 3
                                                      [parentID] => 2
                                                      [text] => Dashboard
                                                      [cls] => x-btn-icon
[icon] => lib/extjs/resources/images/default/tree/s.gif [singleClickExpand] => 1
                                                      [leaf] => 1
                                                      [id] => dashboard
                                                          )
                                            )
                                    )
                        )
        )

.........
wow!
it means that by nid and parentID, I'll notice where I must add children item to array...

Thanks,
Shahrzad



Reply via email to