"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."
Dus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 | $navitems[0]['name'] = 'Home'; $navitems[0]['level'] = '0'; $navitems[1]['name'] = 'Appels'; $navitems[1]['level'] = '0'; $navitems[2]['name'] = 'Rood'; $navitems[2]['level'] = '1'; $navitems[3]['name'] = 'Groen'; $navitems[3]['level'] = '1'; $navitems[4]['name'] = 'Peren'; $navitems[4]['level'] = '0'; for ($i = 0; $i < count($navitems); $i++) { if ($navitems[$i]['level']=="1") { echo "   "; } echo $navitems[$i]['name'].'<br>'; }  | 
[ Voor 73% gewijzigd door Room42 op 04-10-2004 01:03 ]
"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron
Nee, je slaat 2x een andere waarde op (groen en rood) in dezelfde variabele. Maar dat zal wel een tikfout zijn.Reveller schreef op 04 oktober 2004 @ 00:45:
• heb ik die $navitems array zo goed opgebouwd?
Ik denk dat je beter even de search na kan slaan om wat recursieve algoritmes te vinden. Dit onderwerp is al vrij vaak en uitvoerig voorbij gekomen namelijk.Reveller schreef op 04 oktober 2004 @ 00:45:
• wie helpt mij op weg met die for-loop?
Met een for-constructie zal het zoiets worden:
1
2
3
4
5
6
7
 | for ($i = 0; $i < count($navitems); $i++) { echo $navitems[$i]['name'].'<br>'; if count($navitems[$i]) != 0) { for ($j = 0; $j < count($navitems[$i]); $j++) { echo '- '.$navitems[$i][$j]['name'].'<br>'; } }  | 
Denk eens goed na. Wat denk je dat dit doet...?Room42 schreef op 04 oktober 2004 @ 00:57:
PHP:
 1 2 3 4 5 6 $navitems[1]['name'] = 'Appels'; $navitems[1]['level'] = '0'; $navitems[1]['name'] = 'Rood'; $navitems[1]['level'] = '1'; $navitems[1]['name'] = 'Groen'; $navitems[1]['level'] = '1';
[ Voor 28% gewijzigd door NMe op 04-10-2004 01:01 ]
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Verwijderd
dan laat je een functie lopen over de menuitems, dit doe je recursief voor alle menu items die het betreffende id als bovenliggend menu item hebben en je komt een heel eind denk ik...
recursie is sowieso nodig, tenzij je jezelf wil binden aan een maximale menu diepte...dan is t ook wel anders op te lossen, maar t mooist is natuurlijk als je een oneindig diep menu kan maken...
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 | <?php $navitems[0]['name'] = 'Home'; $navitems[0]['options'] = array('home' => 'home.html'); $navitems[1]['name'] = 'Appels'; $navitems[1]['options'] = array('groen' => 'groen.html', 'rood' => 'rood.html'); foreach($navitems AS $key => $value) { $mainCatergoryName = $value['name']; $subCatArray = $value['options']; $header = 0; foreach($subCatArray AS $subCat => $href) { if(count($subCatArray) > 1 AND $header == 0) { $header = 1; echo $mainCatergoryName . '<br>'; } if($header == 1) { echo '- '; } echo '<a href="'.$href.'">' . $subCat . '</a><br>'; } } ?>  | 
Is vrij eenvoudige en foutgevoelige en simplistische code, maar dat zoek je maar lekker zelf uit. En nu, het warme bed opzoeken.
/me zet voldaan zijn peecee-tje uit over enkele ogenblikken
[ Voor 31% gewijzigd door Verwijderd op 04-10-2004 01:34 ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 | <? $navitems[1] = Array( parent=>0, name=>'Home' ); $navitems[2] = Array( parent=>0, name=>'Appels' ); $navitems[3] = Array( parent=>2, name=>'Rood' ); $navitems[4] = Array( parent=>2, name=>'Groen' ); $navitems[5] = Array( parent=>0, name=>'Peren' ); function buildMenu($menuItems, $curItem, $depth) { $identToken = " "; $tabWidth = 4; foreach ( $menuItems as $itemKey=>$item ) { if ($item['parent']==$curItem) { echo str_repeat($identToken, $tabWidth * $depth) . $item['name'] . "<br>\n"; buildMenu($menuItems, $itemKey, $depth + 1); } } } buildMenu($navitems, 0, 0); ?>  | 
Verwijderd schreef op 04 oktober 2004 @ 01:30:
recursie is sowieso nodig, tenzij je jezelf wil binden aan een maximale menu diepte...dan is t ook wel anders op te lossen, maar t mooist is natuurlijk als je een oneindig diep menu kan maken...
Ook zonder recursie kun je prima een oneindig diep menu maken hoor. Al ben ik het met je eens dat recursie mooier en waarschijnlijk efficïenter is in dit geval.
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Verwijderd
In principe is het zo dat wanneer je een oneindige diepte wilt creeeren je simpelweg altijd met recursie moet werken. Waarschijnlijk doel je op het idee met twee functies die elkaar aanroepen o.i.d, maar dit is nog steeds een vorm van recursie. Verras me met een voorbeeld.offtopic:
Ook zonder recursie kun je prima een oneindig diep menu maken hoor. Al ben ik het met je eens dat recursie mooier en waarschijnlijk efficïenter is in dit geval.
Het JavaScript gebeuren ziet er voor een deel zo uit:
1
2
3
4
5
6
 | d.add(1,0,'dirnaam','url'); d.add(2,1,'dirnaam','url'); d.add(3,2,'dirnaam','url'); d.add(4,3,'dirnaam','url'); d.add(5,1,'dirnaam','url'); d.add(6,0,'dirnaam','url');  | 
Je ziet hier 1 t/m6, dit zijn als het ware de directory IDs. Deze wordt voor elke dir dus met 1 verhoogd. Het tweede cijfer geeft de parent van de betreffende directory aan.
Als je dus 2 hoofd menu items(1 en 2) hebt met elk een aantal subitems dan hebben de subitems als parent dus 1 of 2. Op deze manier kan je dus heel eenvoudig een oneindig aantal submenus maken zonder dat je moeilijk hoeft te doen met het 'netjes' uittikken van array's. Je plakt er gewoon een nieuw submenu aan met zn eigen ID en geeft op wat zijn parent is.
Verwijderd
Elke recursieve functie kan omgeschreven worden naar een iteratieve functie. Op zijn simpelst gebruik je een while-loopje en een stack.Verwijderd schreef op 04 oktober 2004 @ 10:55:
[...]
In principe is het zo dat wanneer je een oneindige diepte wilt creeeren je simpelweg altijd met recursie moet werken. Waarschijnlijk doel je op het idee met twee functies die elkaar aanroepen o.i.d, maar dit is nog steeds een vorm van recursie. Verras me met een voorbeeld.
En in gecompileerde talen is dat nog eens efficiënter dan een recursief algoritme ook!