der-daniel: möchte verzeichnisbaum erstellen -> schleifenproblem

hallo auch,
ich verzweifel an ner schleife.
ich habe in einer datenbank einen verzeichnisbaum abgebildet.
jeder ordner hat eine id und ein subid. die subid ist die id des übergeordneten elementes.
folgende struktur:
/

  • ordner 1
    |
  • ordner 2
    | |
    | + subordner 2.1
    | | + subordner 2.1.1
    | |   +subordner 2.1.1.1
    | + subordner 2.2
    |
  • ordner 3

sieht in der db so aus:
id|name              |subid |
--+------------------+------+
1 |ordner 1          |0     |
2 |ordner 2          |0     |
3 |ordner 3          |0     |
4 |subordner 2.1     |2     |
5 |subordner 2.2     |2     |
6 |subordner 2.1.1   |4     |
7 |subordner 2.1.1.1 |6     |

so nun hab ich mir das skript so gedacht:
1. alle ordner mit subid 0 via while-schleife
   erstellen wenn noch nicht vorhanden und
   gleich reinwechseln.
2. alle ordner deren subid die aktuelle id ist
   mit der gleichen methodik anlegen
3. wieder ein verzeichnis höher wechseln, damit der pfad stimmt
   für den nächsten while-durchlauf

und hier hakts bei mir. das läuft gut bis zur zweiten ordnerebene (subordner 2.1) aber alles was noch tiefer ist wird nicht angelegt.

ich weiß nicht, wie ich das angehen soll, damit ich unendlich tiefe strukturen anlegen kann. mit meiner aktuellen emthodik schliesse ich natürlich alle unterstrukturen ab der 2. ebene aus.
ich könnte zwar meine skript einfach hundertmal inneinander verschachteln, aber das macht ja auch keinen sinn...

habt ihr da ideen dazu?

danke für eure hilfe,
der-daniel

hier mein gekürzter code zum besseren verständnis:

<-- mysql-abfrage für hauptordner mit id 0 -->
while (mysql_fetch_object)
{
 if ($ordner-id == "0")
 {
  if (!@ftp_chdir($ftp, $ordner))
  {
   ftp_mkdir($ftp, $ordner);
   ftp_chdir($ftp, $ordner);
   <-- mysql-abfrage für subordner mit subid 0 -->
   while (mysql_fetch_object)
    {
     if (!@ftp_chdir($ftp, $subordner))
     {
      ftp_mkdir($ftp, $subordner);
      HIER MÜSSTE ICH WIEDER IN DEN ORDNER UND WIEDER CHECKEN AUF SUBORDNER
      WEISS ABER NICHT WIE ICH DAS MACHEN SOLL UM UNENDLICHE STRUKTUREN
      ABBILDEN ZU KÖNNEN
     }
    }
    ftp_cdup($ftp);
  }
  ftp_cdup($ftp);
 }
}

  1. Lieber Daniel,

    ich verzweifel an ner schleife.

    einen Verzeichnisbaum abzubilden hört sich verdächtig nach einer rekursiven (also sich mittendrin selbst aufrufenden) Funktion an.

    Ohne Datenbank und im regulären Dateisystem benutze ich immer eine Funktion die ungefähr so geht:

    "Verzeichnis_Inhalt" ($pfad)
    1.) lege ein Array an
    3.) öffne Verzeichnis zum lesen
    4.) gehe jeden Eintrag (außer '.' und '..') durch und tue folgendes
    4.a) wenn Eintrag eine Datei ist (is_file), Array um den Eintrag (samt Pfad) erweitern
    4.b) wenn Eintrag ein Verzeichnis ist (is_dir), dann
       I.) diese Funktion hier ("Verzeichnis_Inhalt") mit Eintrag samt Pfad als Parameter wiederum aufrufen
       II.) den Rückgabewert in das Array hineinsetzen
    5.) Array als Rückgabewert zurückgeben

    In 4.b) ruft sich die Funktion selbst wieder auf, daher nennt man das eine rekursive Funktion. Vielleicht lässt sich das Prinzip auf Deine Herangehensweise übertragen?

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.