PHP: Rekursives Einlesen von Ordnern und Dateien liefert doppelte Werte
bearbeitet von
Hallo Enrico, hallo Juligrid,
das ist so noch **keine** gute Lösung. Das Ergebnis des Verzeichnis-Scans ist eine Array-Hierarchie, in der Dateien einen numerischen Key tragen und Verzeichnisse ihren Namen. Es bricht aber die Hölle los, wenn ein Verzeichnis einen Namen wie "17" trägt. Wenn zuerst 18 Dateien gefunden werden und dann dieses Verzeichnis kommt, überschreibt es den Eintrag für die 18. Datei.
Hier werden verschiedene Wertedomänen als Quelle für Array-Indizes vermischt, das darf man nicht tun. Die Kollision ist vorprogrammiert.
Wenn Du den Namen des Filesystem-Objekts als Array-Key verwenden willst, dann sei damit konsequent. Für Verzeichnisse verwendest Du als Wert das Array mit deren Inhalt, und für einfache Dateien irgendwas, was kein Array ist. Zum Beispiel einen String "FILE" oder einfach TRUE. Wenn Du den gelesenen Verzeichnis-Baum nachher traversierst, kannst Du mit is_array feststellen, ob der jeweilige Eintrag eine Datei ist oder ein Unterordner.
Wenn Du die laufende Nummer als Array-Key verwenden wilst, musst Du pro gefundenen Filesystem-Objekt ein Informationsobjekt erstellen, und dieses Informationsobjekt ins $resultat-Array schreiben. Das Informationsobjekt kann durch eine PHP-Klasse gebildet werden (in dem Fall eine Hierarchie: FilesystemObject mit den Subklassen DirectoryEntry und FileEntry), oder du machst es „klassisch“ mit einem simplen Array. Erster Array-Eintrag ist der Name der Datei oder des Ordners, und bei Ordnern gibt's einen zweiten Eintrag mit dem $resultat-Array dieses Ordners.
Die erste Lösung ist eigentlich die PHP-typischere. Da PHP Arrays keine Hashtables sind, bleibt darin sogar die Reihenfolge erhalten, in der Du die Dateien gefunden hast (falls das wichtig ist).
Wie auch immer. Entweder numerische Indizes ODER Dateinamen. Nicht vermischt.
_Rolf_
--
Dosen sind silbern