romy: Ordnerstruktur auslesen

Einen schönen guten Abend,

ich stehe etwas im Wald, aber vielleicht kann mir ja jemand helfen.
Ich habe eine Datenbanktabelle, welche Ordnernamen abgelegt hat. Zusätzlich gibt es noch ein Attribut, welches aussagt, ob dieser Ordner ein Unterordner ist und zwar von welchem.

z.B.
ID Name Unterordner
0 Test1 0
1 Test2 0
2 Test3 1
3 Test4 1
4 Test5 3
5 Test6 0

Ich möchte dies nun ausgeben, wie eine reale Ordnerstruktur:
Als Ergebnis hätte ich dann:

Test1
Test2
-- Test3
-- Test4
-- -- Test5
Test6

Wie kann ich dass umsetzen? Die Unterordner können beliebig tief gehen. Ich nehme an ich brauche eine rekursive Funktion, aber mir fällt gar kein Weg ein, wie ich dies lösen kann, ohne Ordner doppelt zu schreiben.

Vielen Dank!

ciao
romy

PS: Ich verwende PHP, aber mir geht es eher ums Prinzip.

  1. Hi,

    Wie kann ich dass umsetzen? Die Unterordner können beliebig tief gehen. Ich nehme an ich brauche eine rekursive Funktion, aber mir fällt gar kein Weg ein, wie ich dies lösen kann, ohne Ordner doppelt zu schreiben.

    machs mit einer Rekursion oder - ganz trocken - ohne Rekursion (sofern die Verschachtelungstiefe und die Zahl der Ordner überschaubar ist ;-), was (dann) vielleicht sogar vorzuziehen ist. Ich denke, dass Du ein Problem bekommst, wenn Du einen Ordner in die aufgebaute Struktur integrieren möchtest, der auf einen Ordner verweist, der selbst noch nicht geladen ist, stimmts?

    Oder was meinst Dú mit "Ordner doppelt schreiben"?

    Q!

    1. Hi Q!,

      machs mit einer Rekursion oder - ganz trocken - ohne Rekursion (sofern die Verschachtelungstiefe und die Zahl der Ordner überschaubar ist ;-), was (dann) vielleicht sogar vorzuziehen ist. Ich denke, dass Du ein Problem bekommst, wenn Du einen Ordner in die aufgebaute Struktur integrieren möchtest, der auf einen Ordner verweist, der selbst noch nicht geladen ist, stimmts?

      Ja natürlich ;) wenn ich gar nicht klar komme, werde ich die Tiefe vorgeben, was eigentlich auch nicht schlimm ist, aber mich fuchst das Problem und ich würde es gern lösen.
      Dein zuletzt beschriebenes Problem kann ich etwas unschön verhindern, indem in nach dem oberordner sortiere. Ich kann dir gar nicht genau sagen womit ich mich schwer tu. Ich habe schon Schwierigkeiten die Daten vernünftig in ein Array abzulegen. Mit fällt keine geeignete Struktur ein. Wenn einmal ein Wald da ist, ...

      ciao
      romy

      1. Hi,

        machs mit einer Rekursion oder - ganz trocken - ohne Rekursion (sofern die Verschachtelungstiefe und die Zahl der Ordner überschaubar ist ;-), was (dann) vielleicht sogar vorzuziehen ist. Ich denke, dass Du ein Problem bekommst, wenn Du einen Ordner in die aufgebaute Struktur integrieren möchtest, der auf einen Ordner verweist, der selbst noch nicht geladen ist, stimmts?
        Ja natürlich ;) wenn ich gar nicht klar komme, werde ich die Tiefe vorgeben, was eigentlich auch nicht schlimm ist, aber mich fuchst das Problem und ich würde es gern lösen.

        die Tiefe vorzugeben ist nicht erforderlich. Durchlaufe doch die aus dem RDBMS erhaltene Matrix so lange bis sich die Menüstruktur vollständig aufgebaut hat.

        Dein zuletzt beschriebenes Problem kann ich etwas unschön verhindern, indem in nach dem oberordner sortiere.

        Ich glaube nicht, dass das klappt. Du müsstest ja dahingehend sortieren, dass der "Papa-Ordner" immer da ist. Wie willst Du das machen?

        Ich kann dir gar nicht genau sagen womit ich mich schwer tu. Ich habe schon Schwierigkeiten die Daten vernünftig in ein Array abzulegen. Mit fällt keine geeignete Struktur ein. Wenn einmal ein Wald da ist, ...

        Die Menüstruktur könnte natürlich ein XML sein. Dieses XML müsstest Du nach abgeschlossenem Befüllen transformieren. Eine XSLTransformation böte sich da an.

        Q!

  2. Hi,

    Ich möchte dies nun ausgeben, wie eine reale Ordnerstruktur:

    Wenn ich das richtig verstehe möchtest Du einer quasi "zweidimensionalen" Struktur die dritte Dimension verleihen ;-)

    Vielleicht hilft Dir folgender Gedankengang: jedes Verzeichnis muss ja nur seine Eltern und seine Kinder kennen. Auf diese Art lässt sich ein Array mit beliebig tiefer Hirarchie erzeugen.

    Ein Beispiel findest Du in der Javascript-Navigation dieser - weil kommerziell nicht verlinkten - Seite: ag.sixt.de. Einträge werden unter Angabe der parent_id und der eigenen id erzeugt - das entspricht ja in etwa den Daten, die Du fuer Deine Ordnerstruktur hast. Daraus wird dann ein beliebig tief verschachtelbares Menue.

    Wirf mal ein Blick in den Konstruktor, ggf hilft Dir das Prinzip weiter.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Hi Joachim,

      Ein Beispiel findest Du in der Javascript-Navigation dieser - weil kommerziell nicht verlinkten - Seite: ag.sixt.de. Einträge werden unter Angabe der parent_id und der eigenen id erzeugt - das entspricht ja in etwa den Daten, die Du fuer Deine Ordnerstruktur hast. Daraus wird dann ein beliebig tief verschachtelbares Menue.

      Vielen Dank für den Hinweis, ich habe den Javascriptteil mal kurz überflogen und erstmal nichts Brauchbares finden können, aber auch hier gilt, dass ich noch etwas Zeit brauche und schon mal danke sagen möchte.

      ciao
      romy

  3. echo $begrüßung;

    Ich habe eine Datenbanktabelle, welche Ordnernamen abgelegt hat. Zusätzlich gibt es noch ein Attribut, welches aussagt, ob dieser Ordner ein Unterordner ist und zwar von welchem.

    Schau mal hier: https://forum.selfhtml.org/?t=126324&m=814639

    echo "$verabschiedung $name";

    1. Hi dedlfix,

      Schau mal hier: https://forum.selfhtml.org/?t=126324&m=814639

      Vielen Dank, das sieht sehr vielversprechend aus. Bis ich das allerdings gelesen habe ist mein Thread auf jeden Fall wieder weg, deswegen einfach danke schön.

      ciao
      romy