hi ich habe ein kleines problem mit meiner foreach schleife...
und zwar will ich rekursiv alle verzeichnisse auflisten,
mein problem liegt jetzt darin das es nur eine ebene durchsucht...
(ich habe mal alles gepostet vielleicht liegt der fehler ja woanders)
ich glaube das problem liegt an der foreach-schleife
(die bei "Verzeichnisliste nach unterverzeichnissen abgrasen")
sie läuft solange bis $list zuende ist, und in der foreach-schleife wird ja nochwas an $list angehängt, also müsste sie ja auch diesen wert durchlaufen, sie geht aber nur solange wie der original $list-array ist und nicht wie der aktuelle (ich hoffe man versteht mich noch)
kann ich irgendwie die foreach dazu bringen nochmal $list einzulesen damit sie weiterläuft, und die neuen werte in $list auch durchlaufen werden...
ist nicht gerade der schönste code aber ich poste ja nicht umsonst im anfänger-forum...
danke für eure hilfe
gruß mAy
und zwar will ich rekursiv alle verzeichnisse auflisten,
Code:
class verzeichnisse { ## durchsucht verzeichnisse und gibt einen array ## gefüllt mit dem verzeichnisbaum zurück function list_dirs($dir) { # Falls der letzte "/" vergessen wurde, anhängen if (substr($dir,(strlen($dir)-1)) != "/") { $dir = $dir."/"; } $handle=opendir($dir); while ($file = readdir ($handle)) { # "." & ".." sowie versteckte dateien ausschließen # Nur Verzeichnisse werden gelistet if ($file != "." && $file != ".." && substr($file,0,1) != "." && is_dir($dir.$file)) { $list[] = $file; } } closedir($handle); // Verzeichnisliste nach unterverzeichnissen abgrasen: foreach ($list as $key1 => $verzeichnis) { $liste = $this->unterverzeichnis($dir.$verzeichnis); if (is_array($liste)) { foreach ($liste as $key2 => $value) { $list[] = $verzeichnis."/".$value; } } } return $list; } ## durchsucht verzeichnisse und gibt einen array ## mit allen gefundenen unterverzeichnissen zurück function unterverzeichnis($dir) { if (substr($dir,(strlen($dir)-1)) != "/") { $dir = $dir."/"; } $handle=opendir($dir); while ($file = readdir ($handle)) { # Nur Verzeichnisse werden gelistet if ($file != "." && $file != ".." && substr($file,0,1) != "." && is_dir($dir.$file)) { $list[] = $file; } } closedir($handle); # Falls unterverzeichnisse gefunden diese als array zurückgeben # falls nicht return = false if (is_array($list)) { return $list; } else { return false; } } }
mein problem liegt jetzt darin das es nur eine ebene durchsucht...
(ich habe mal alles gepostet vielleicht liegt der fehler ja woanders)
ich glaube das problem liegt an der foreach-schleife
(die bei "Verzeichnisliste nach unterverzeichnissen abgrasen")
sie läuft solange bis $list zuende ist, und in der foreach-schleife wird ja nochwas an $list angehängt, also müsste sie ja auch diesen wert durchlaufen, sie geht aber nur solange wie der original $list-array ist und nicht wie der aktuelle (ich hoffe man versteht mich noch)
kann ich irgendwie die foreach dazu bringen nochmal $list einzulesen damit sie weiterläuft, und die neuen werte in $list auch durchlaufen werden...
ist nicht gerade der schönste code aber ich poste ja nicht umsonst im anfänger-forum...
danke für eure hilfe
gruß mAy
Kommentar