Danny: Sortierung eines komplexen Arrays (Dateien und Ordner)

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

  1. 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

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. 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