Kirjoittaja: exAtuu
Kirjoitettu: 03.01.2006 – 03.01.2006
Tagit: ohjelmointitavat, koodi näytille, vinkki
Tätä on moni kysellyt, joten teenpä tästä koodivinkin. Asia on kovin simppeli, mutta ei tunnu avautuvan automaagisesti kaikille.
Koodilla siis voidaan listata rekursiivisesti hakemistoja. Jutun jujuna on itseään kutsuva funktio, siis rekursio.
<?php function rekursiolista($hakemisto) { $lista = glob($hakemisto . '*'); //jos hakemistossa ei ole kohteita, lopetetaan if (count($lista) == 0) return 1; echo "<ul>\n"; foreach ($lista as $file) { //jos kohde on hakemisto, aloitamme erityistoimenpiteet if (is_dir($file)) { echo "<li>{$file}\n"; rekursiolista($file . '/'); //teh rekursio echo "</li>\n"; } else echo "<li>{$file}</li>\n"; } echo "</ul>\n"; } ?>
Käyttö
Käyttö tapahtuu seuraavasti:
rekursiolista('hakemisto/');
Huomaa siis viimeisen kauttaviivan tärkeys.
Mikä/mitä on rekursio? :P
Tässä vähän tietoa:
https://www.ohjelmointiputka.net/oppaat/opas.
Mikä on hakemisto? :P
lainaus:
Mikä on hakemisto? :P
LOL
Löytyykö demoa?
Demoa ei löydy eikä sitä tarvinne. Tässä ei oikein ole mitään demottavaa.
Itsehän käytän tällaista, joka on "hieman" monikäyttöisempi:
function dirscan($dir){ if(is_dir("../".$dir)) $basedir = dir("../".$dir); else die("Directory " . $dir . " does not exist."); $dirs = array(); while(false !== ($file = $basedir -> read())){ if($file != ".." && $file != "."){ if(is_dir("../".$dir.$file)){ $filepath = $dir.$file."/"; $dirs[] = $filepath; $dirs = array_merge($dirs, dirscan($filepath)); }}} return $dirs; }
No nämä tosiaan ovat koodivinkkejä, joita harvoin tulee edes käyttää suoraan. Tämän koodivinkin aiheena oli rekursio.
Eipä tommosia kertakäyttöfunkkareita kannata tehä edes esimerkin vuoks, vaikeehan tuolta kaiken HöTöMöLön seasta on löytää oleellinen. Funkkari ja tulostuksen muotoilu erikseen. Ite tein tämmosen rekursiivisen tiedostolistauksen (pari lisäystä ja saa myös tyhjät hakemistot listattua) projektiini, voin käyttää samaa metodia uudelleen ja muotoilla palautusarvoa niinko huvittaa: https://www.ohjelmointiputka.net/koodivinkit/
Et varmaan huomannut, mutta ylin koodilistaus kyllä näyttää funktion sellaisenaan. Poistin nyt kuitenkin tuon hötömölöversion häiritsemästä.