Sortierung eines komplexen Arrays (Dateien und Ordner)
Danny
- php
Hallo Community,
ein komplexes Array soll umgeformt (sortiert) werden.
Die Quellstruktur kommt von einer Dateisystem-Methode zurück (hier Klasse PEAR::File/Find).
Dieses Verzeichnis-Array will ich vor der Ausgabe sortieren.
Um die bekannten Array-Funktionen von PHP zu verwenden, muß ich wohl etwas drumherum stricken, da es n Dimensionen geben kann und auch die Schlüssel variabel sind...
Quelle:
array (
[0] => datei_2.php
[1] => datei_1.php
[ordner_2] => array (
[0] => datei_2_1.php
)
[ordner_1] => array (
[0] => datei_1_1.php
)
)
Ziel:
array (
[ordner_1] => array (
[0] => datei_1_1.php
)
[ordner_2] => array (
[0] => datei_2_1.php
)
[1] => datei_1.php
[0] => datei_2.php
)
Dabei sollen auch leere Ordner berücksichtigt werden (Schlüssel vom Typ String, deren Wert kein Array ist).
Wie kann man das möglichst effizient umsetzen?
Ich bin dankbar für jeden Tipp!
freundlichen Gruß
Danny
Huhu Danny
Wie kann man das möglichst effizient umsetzen?
Ich bin dankbar für jeden Tipp!
Folgendes könnte funktionieren
Alle Array-Elemente der Reihe nach durchgehen
zwei temporäre Arrays anlegen (eines für Ordner (D), eines für Dateien (F)
Ist das Array-Element kein Array kommt es in (F)
Ist das Array-Element ein Array kommt es in (D) (bzw. der key)[1]
Dann beide Arrays sortieren und zuerst die Ordner, und dann die Dateien ausgeben.
So weit so einfach.
Damit das auch bei beliebiger Verzeichnistiefe funktioniert muss
sich die Funktion an [1] selbst, also rekursiv, aufrufen .
Viele Grüße
lulu
Huhu Lulu (klingt irgendwie hawaianisch!? ;-)
Danke für den Hinweis! Ich werde mal versuchen, sowas in der Art zusammenzubasteln...
Interessant wäre eine Zeitmessung, um die Performance verschiedener Varianten zu testen. Vielleicht hat es Vorteile, wenn man das Quell-Array zunächst nur oberflächlich traversiert und eine Pfad-Liste aufbaut. Anhand dieser Pfadliste könnte man dann auf einfache Weise iterativ sortieren. Mit den Pfaden (sofern sie direkt auf das jeweilige Ordner-Array zeigen) müßte das doch ab der zweiten Umsortierung Zeit sparen... Oder ist dieser Ansatz unsinnig?
MfG
Danny