Ik heb de volgende code:
De bedoeling is dat de functie getAllChildNodes alle kinderen van een node ophaalt. Met andere woorden: als ik de kinderen van Producten wil hebben, moet de functie 3, 4, 5, 6, 7 retourneren (in een array).
Ik ben zover dat ik van een node uit de array de directe kinderen kan bepalen. Mijn vraag is hoe ik efficient verder langs de array kan lopen om de overige kinderen eruit te halen. Het zou kunnen door deze functie zichzelf aan te laten roepen voor elke node (recursie), maar dat lijkt me wat inefficient als de $menuItems array groter wordt. Heeft iemand een andere oplossing?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| $menuItems[1] = Array('parent'=> 0, 'title'=>'Home' ); $menuItems[2] = Array('parent'=> 1, 'title'=>'Producten'); $menuItems[3] = Array('parent'=> 2, 'title'=>'Groenten' ); $menuItems[4] = Array('parent'=> 2, 'title'=>'Fruit' ); $menuItems[5] = Array('parent'=> 3, 'title'=>'Zomer' ); $menuItems[6] = Array('parent'=> 3, 'title'=>'Winter' ); $menuItems[7] = Array('parent'=> 4, 'title'=>'Rood' ); /** * Fetch all descendants of a node */ function getAllChildNodes($menuItems, $activeItem) { $childNodes = array(); foreach ($menuItems as $itemKey=>$item) if ($item['parent'] == $activeItem) $childNodes[] = $itemKey; return $childNodes; } $allChildren = getAllChildNodes($menuItems, 2); print_r($allChildren); |
De bedoeling is dat de functie getAllChildNodes alle kinderen van een node ophaalt. Met andere woorden: als ik de kinderen van Producten wil hebben, moet de functie 3, 4, 5, 6, 7 retourneren (in een array).
Ik ben zover dat ik van een node uit de array de directe kinderen kan bepalen. Mijn vraag is hoe ik efficient verder langs de array kan lopen om de overige kinderen eruit te halen. Het zou kunnen door deze functie zichzelf aan te laten roepen voor elke node (recursie), maar dat lijkt me wat inefficient als de $menuItems array groter wordt. Heeft iemand een andere oplossing?
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."