Avatar billede rune.osterdal.com Nybegynder
27. november 2004 - 22:13 Der er 1 kommentar

rekursiv funktion

Jeg er ved at lave et leksikon til min klasse på vores hjemmeside.

Det er idéen at man skal kunne oprette en kategori og så angive hvilken kategori, den oprettede kategori skal være underkategori til.

For at kunne udskrive alle kategorier så de ligger rigtig under hinanden skal jeg bruge en rekursiv funktion.

Data der gemmes er id, navn, superid --> der fortæller hvilket id kategorien hører under.

Nedenstående funktion er designet til en <select> hvor et undermenupunkt rykkes ét mellemrum (&nbsp;) ind:
menupunkt1
menupunkt2
&nbsp;undermenupunkt1

osv..

function rekkat($data,$superid){
    // $data skal sorteres superid,navn
    $level = ?; //hvor mange mellemrum, der skal rykke menupunktet ind
    for ($i=0;$i<count($data);$i++){
        if ($data[$i][superid] == $superid){
            print "<option value=\"$data[$i][id]\">";
            for ($j=0;$j<$level;$j++){
                print "&nbsp;";
            }
            print $data[$i][navn]."</option>\n";
            rekkat($data,$i);
        }
    }
}

funktionen kaldes så første gang med rekkat($data,0) hvor 0 angiver at det er hovedmenupunkterne der skal behandles.

Jeg kan se muligheder for at effektivisere min kode mht. hvor meget af $data man sender videre, men lige nu vil jeg bare holde det simpelt og få det til at virke. Kan ikke lige gennemskue brugen af "level".

Håber I er klar på udfordringen ;-)
Avatar billede ellebaek Nybegynder
27. november 2004 - 22:22 #1
jeg har en der minder meget om den..

Den tager så bare mellemrummet med som argument..

altså:

function rekkat($data,$superid, $level){
    // $data skal sorteres superid,navn
    for ($i=0;$i<count($data);$i++){
        if ($data[$i][superid] == $superid){
            print "<option value=\"$data[$i][id]\">";
            print $level
            print $data[$i][navn]."</option>\n";
            rekkat($data,$i, $level . "&nbsp;&nbsp;&nbsp;");
        }
    }
}

og så kalder den med:
rekkat($data, 0, "");

Virkede funktionen ellers som den skulle ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester