PHP und Array - n00b braucht Rat ...

  • Tach auch!

    Ich versuche mal, keine dummen Anfängerfehler zu machen. Hoffentlich ist das Resultat hier nicht zu lang und alle eventuellen Fragen sind beantwortet ;)

    Aslo, folgendes Problem: ich versuche ein PHP-Script zu schreiben, welches mit Verzeichnissen/Pfaden arbeitet - je nachdem von wo es aufgerufen wird, soll es drei Verzeichnislevel "nach unten" auslesen - ausgehend von

    Code
    $dirbase = getcwd()."/";

    und dabei (a) die Verzeichnisnamen singulär (also jeden Level) in einem Array speichern und gleichzeitig die Verzeichnisnamen sowie einige Dateinamen auswerten (so nach dem Motto "wenn = x, dann echo y").

    Der logische Aufbau ist im Endeffekt ganz einfach und auch fertig. Worum es geht ist nun leider die Art und Weise, wie PHP mit Arrays umgeht. Nach endlosem Studium diverser 'Anleitungen' bin ich am Ende meiner Weisheit, anders ausgedrückt: $EOW = TRUE.

    Vorgreifend möchte ich vielleicht anmerken dass PHP dies zwar vielleicht kann, die Lösung aber im Gegensatz zu anderen Sprachen viel zu komplex ist; ich habe ehrlich gesagt nach der ganzen Lektüre um PHP-Arrays so ziemlich die Faxen dicke - also entweder bin ich zu blöde, oder die gesammelten Beispiele waren nur zur Userverwirrung gedacht.

    Zur Verdeutlichung des Problems:

    (a) PHP v5.2.4 auf Apache v2.2.6 (lokal simuliert via XAMPP).
    (a-1) KEINE Schreibberechtigung für Scripts!

    (b) Startverzeichnis ist "ww.xyz.cm" oder irgendein Unterverzeichnis hiervon mit mindestens drei Verzeichnissen 'darunter'; eine Prüfung "ob vorhanden" ist nicht nötig. Der Übergebene Wert des Startverzeichnisses ist jeweils ein fester Wert; es ist also egal ob dieser Wert "ww.xyz.cm/" oder "http://ww.xyz.cm/test/wurst/brot/kaese/" ist.

    (c) Das Script soll die noch unbekannte Zahl von Verzeichnisse im ersten Level unterhalb vom Start-Ort auslesen und in ein Array schreiben, Beispiel:

    Code
    + ww.xyz.cm/test/
    - butter/
    - kaese/
    - margarine/
    - marmelade/

    (also einfaches Array über "$first[$zaehler]" würde gehen, aber ...)

    (d) Danach soll das Script jeweils in die gefundenen Directories gucken, um dort den zweiten Level auszulesen, Beispiel:

    (e) Jetzt soll das Script diese Daten aber 'verknüpft' bearbeiten (also insgesamt für alle drei Ebenen *EIN* Multilevel-Array nutzen). Wenn ich also alle drei Subdirectory-Level der Reihe nach bearbeiten will, müsste ich im Endeffekt ein Konstrukt in dieser Form haben (BEISPIEL, kein PHP code!):

    Code
    $pfad = $array[zaehler1][$zaehler2][zaehler3]


    damit ich folgendes machen könnte (auch nur BEISPIEL, kein PHP-Code!):

    Setzt man hier mal ein paar Beispielsdaten ein, würde ich folgendes brauchen:

    $pfad = $array[1][0][0]

    liefert 1. Verzeichnisnamen im 1. Level

    $pfad = $array[1][1][0]

    liefert 1. Verzeichnisnamen im 1. Level plus 1. Verzeichnisnamen 2. Level

    $pfad = $array[2][2][1]

    liefert 2. Verzeichnisnamen im 1. Level plus 2. Verzeichnisnamen 2. Level plus dem darin befindlichen 1. Verzeichnisnamen im 3. Level

    ....
    Örgs! Röchel!

    Ich hatte einen Ansatz der sogar ähnlich mit der Syntax "$blahbla[x][x][x]" funktionierte, allerdings war die Ausgabe mies und durch die ziemlich abgefahrenen interne Zähler- und Flag-Stellung von PHP komplett in den Fritten. Ein Nachhalten der ganzen Flags und Zähler hätte mehr Zeit gekostet als alles andere ... und davon ab war ich nicht in der Lage, über PUSH z.B. direkt in die 2. Verzeichnisebene des Arrays zu schreiben (es sei denn, ich manipuliere 30 Flags, 20 Settings und 10 Counter und würfle gleichzeitig einen 6-er Pasch).

    So, jetzt könnt ihr loslachen, brüllen, weinen oder gar einfach ohnmächtig darniedersinken ob meiner infantilen Ahnungslosigkeit ...

    Gibt es dafür eine EINFACHE Lösung oder nicht?

    "Niemand ist wirklich unnütz - er kann immer noch als schlechtes Bespiel gelten!"

    In diesem Sinne ...

    ... Danke!

    R3al


  • stichwort rekursive funktion

  • GreenRover,

    DANKE! ... Das war vom Lösungsansatz nicht ganz was ich erwartet hatte, aber das war ja der Grund meiner Verzweiflung ... falsches Denken! Gerade ein wenig herumprobiert und siehe da, es klappt. Jetzt muss ich zwar meinen restlichen Kram umstellen, aber auch das ist mir egal - schliesslich habe ich etwas gelernt ;)

    Werde mir auf alle Fälle das Thema rekursive Funktionen nochmal genauer ansehen - auf die Lösung wäre ich nie im Leben gekommen! Das liegt wohl an meiner 'Konditionierung' durch mehrere alte Programmiersprachen, ich denke ganz einfach viel zu geradlinig ;)

    Danke nochmals,

    R3al