webForumDet fria alternativet

Rekursiv programmering (-heter det så?)

12 svar · 251 visningar · startad av Chavez

ChavezMedlem sedan maj 20001 953 inlägg
#1

Hej

Behöver lite hjälp här.

Har ett system som använder sig av templatesfiler. Dessa skall gå och redigera via WWW. Hade tänkt att ordna en liten fin "trådlista" för att visa de olika filerna beroende på vilken katalog som de ligger i. Då "katalogdjupet" är olika stort ställer det till det lite för mig, hur nästlar man sig ner hela vägen för att sedan gå upp en nivå, ner igen, osv.

Ni förstår säkert.

Tack på förhand!

------------------
<A HREF="mailto:chavez@post.netlink.se">Mvh Chavez
</A> UIN: 73975020

Sveriges PHP-portal nr 1!

KimMedlem sedan jan. 20007 697 inlägg
#2

Det är inte så svårt faktiskt, skapa en funktion som listar innehållet i en viss katalog och om den stöter på en undermapp till den du redan står i så låter du den funktion som du redan står i anropa sig själv och gå ner i nästa katalog.

ChavezMedlem sedan maj 20001 953 inlägg
#3

Hej igen,

min arma lilla geleklump därunder hårfästet listar inte ut riktigt hur jag skall göra detta. Kan du Kim, eller någon annan ge ett kodexempel på det jag önskar? Det är ju vanliga hederliga filsystemsfunktioner, så den biten bör ju inte vara så svår.

------------------
<A HREF="mailto:chavez@post.netlink.se">Mvh Chavez
</A> UIN: 73975020

Sveriges PHP-portal nr 1!

ChavezMedlem sedan maj 20001 953 inlägg
#4

Nått är fel, vad? :)

function rekursiv_templates( $cat )
{
    $out .= "<ul>";
    $dir = opendir($cat);
    
    while ($file = readdir($dir)) {
        if (eregi(".ihtml$", $file)) {
            $out .= "<li>";
            $out .= $file;
            $out .= "</li>";
        } else {
            rekursiv_templates($cat."/".$file."/");
        }
    }
    
    $out .= "</ul>";
    return $out;
}

------------------
<A HREF="mailto:chavez@post.netlink.se">Mvh Chavez
</A> UIN: 73975020

Sveriges PHP-portal nr 1!

leifenMedlem sedan juli 200173 inlägg
#5

Jag har inte gjort det i PHP men väl i C++. Med readdir() får du väl även . och .. som du ju absolut INTE får gå ned i för då hamnar du i en oändlig loop.

[Redigerat av leifen den 04 feb 2002]

SPiNMedlem sedan mars 20007 896 inlägg
#6
...
 } else {
rekursiv_templates($cat."/".$file."/");
}
...

Borde väl vara:

...
 } else {
$out .= rekursiv_templates($cat."/".$file."/");
}
...

------------------
SPiN, bjorne.w@telia.com

stevenetMedlem sedan juni 20001 251 inlägg
#7

Jag var först :p

------------------
SteveNet
------------------
- Det var motgräs!
Roland Sandberg förklarar varför han missade öppet mål.

[Redigerat av stevenet den 04 feb 2002]

SPiNMedlem sedan mars 20007 896 inlägg
#8

Nej, det var du ju inte. Det var ju jag. :D

------------------
SPiN, bjorne.w@telia.com

leifenMedlem sedan juli 200173 inlägg
#9

sedan bör väl closedir() också vara med. Dessutom gillar jag inte 1:a raden med $out.= eftersom $out inte är initierad i funktionen.

SPiNMedlem sedan mars 20007 896 inlägg
#10

Man kan ju inte initiera $out i funktionen, eftersom att den är rekursiv. Man borde i så fall skicka med den som parameter till funktionen.

Red.} Eller förresten, det borde ju visst gå att initiera den i funktionen eftersom att den endast är en lokal variabel för funktionen. Men jag skulle nog ändå skicka med den som parameter.

------------------
SPiN, bjorne.w@telia.com

[Redigerat av SPiN den 04 feb 2002]

leifenMedlem sedan juli 200173 inlägg
#11

Det kan man väl, den är ju lokal för just det anropet. Sedan returneras ju värdet och läggs på den $out som anropade den, om den anropas som du föreslog. Men det är klart man får ju med lite extra start ul och slut ul för varje underkatalog och det kanske inte är meningen. I så fall skulle jag ha en parameter som talar om om det är första anropet till funktionen eller om det är ett rekursivt anrop.

ChavezMedlem sedan maj 20001 953 inlägg
#12

Ni har alla så rätt, det mesta kom jag också fram till, offline, sittandes och kommentera bort en massa för att se vart felet var.

Hur som helst, nu funkar det. Tack.

Ps. stevenet var först (ICQ) :)

------------------
<A HREF="mailto:chavez@post.netlink.se">Mvh Chavez
</A> UIN: 73975020

Sveriges PHP-portal nr 1!

SPiNMedlem sedan mars 20007 896 inlägg
#13

Bah, då gills det inte. Man ska svara här eller inte alls! :OO ;)

124 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)