Ik maak gebruik van een aantal recursieve functies, waaronder een om een option list te bouwen van de array $menuItems. Tot nu toe maakte ik een static variabele $output aan, zodat de waarde van $output niet verloren gaat als de functie opnieuw wordt aangeroepen:
Nu loop ik echter tegen de lamp: als ik 2 keer binnen dezelfde pagina tree() aanroep, bevat $output bij de tweede keer, twee keer de option list. Als ik tree() drie keer aanroep, is het resultaat van de derde aanroep een option list met drie keer het menu erin.
Dat heeft dus te maken met die static variabele, die ik (zo leerde ik nu) helemaal verkeerd toepas. Ik heb dus geprobeerd mijn code aan te passen:
Maar dit werkt ook niet. $output wordt nu elke ronde leeg gegooid.
Hoe los ik dit op?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| /** * Expanded node list */ function tree($menuItems, $curItem=1, $depth=0) { static $output; foreach ($menuItems as $itemKey=>$item) { if ($item['pid'] == $curItem) { $output.= '<option value="'.$itemKey.'">'. str_repeat(' ', $depth).$item['title'].'</option>'; tree($menuItems, $itemKey, $depth+1); } } return $output; } |
Nu loop ik echter tegen de lamp: als ik 2 keer binnen dezelfde pagina tree() aanroep, bevat $output bij de tweede keer, twee keer de option list. Als ik tree() drie keer aanroep, is het resultaat van de derde aanroep een option list met drie keer het menu erin.
Dat heeft dus te maken met die static variabele, die ik (zo leerde ik nu) helemaal verkeerd toepas. Ik heb dus geprobeerd mijn code aan te passen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function tree($menuItems, $curItem=1, $depth=0, $output='') { foreach ($menuItems as $itemKey=>$item) { if ($item['pid'] == $curItem) { $output.= '<option value="'.$itemKey.'">'. str_repeat(' ', $depth).$item['title'].'</option>'; tree($menuItems, $itemKey, $depth+1, $output); } } return $output; } |
Maar dit werkt ook niet. $output wordt nu elke ronde leeg gegooid.
Hoe los ik dit op?
[ Voor 56% gewijzigd door Reveller op 30-11-2004 19:37 ]
"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."