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