Komplexe Struktur ausgeben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Komplexe Struktur ausgeben

    Hi
    Ich habe folgendes Problem:
    In meiner DB habe ich die Tabelle tblFolder.Diese besteht aus:

    ID
    Name
    SubFolderID(Rekursive Beziehung)

    Ein kleines BSP. Dazu:
    ---------------------------------------------------
    \Programmieren
    \Programmieren\C++
    \Programmieren\Java

    Das sieht in der DB etwa so aus
    ****************************
    ID:1
    Name:Porgrammieren
    SubFolderID:0
    ****************************
    ID:2
    Name:C++
    SubFolderID:1
    ****************************
    ID:1
    Name:Java
    SubFolderID:0
    ****************************
    (SubFolderID:0 => Root Folder)

    Nun was ist nun mein Problem? Ich möchte das ganze auf einer Seite(in einer Tabelle) etwa so ausgeben:

    *********************************************************
    *Porgrammieren-*C++---------------* Tutorials-------*---------------*
    *--------------------******************************************
    *--------------------*Jave---------------*------------------*----------------*
    *--------------------******************************************
    *--------------------*Weiteres----------*------------------*---------------*
    ********************************************************
    *Punkt 2-----------* -------------------*------------------*----------------*
    ********************************************************

    Ich habe mir nun schon stundenlang den Kopf zerbrochen (Mehrdimensonales Array etc.) und bring das Ganze einfach nicht hin. Mein grösstes Problem ist, das ich keinen redundanten Code will, da die Strukturtiefe variabel ist und ich sie nicht begrenzen will.
    Ich bin für jeden Tipp dankbar!

  • #2
    Re: Komplexe Struktur ausgeben

    Original geschrieben von mrkanister
    Mein grösstes Problem ist, das ich keinen redundanten Code will, da die Strukturtiefe variabel ist und ich sie nicht begrenzen will.
    so eine anforderung schreit doch förmlich "rekursion!"
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ja ganz genau, aber irgendwie habe ich den Durchblick etwas verloren. Hast du mir ein kleinen Denkanstoss in From eines BSPs?

      Kommentar


      • #4
        PHP-Code:
        function walkR($node,$spaces,&$s,$key=null){
          if(
        is_array($node) && ! array_key_exists('id',$node)){
                 
        $spaces.="    ";
                 foreach(
        $node as $k ){
                 
        walkR($k,$spaces,$s);
            }
          } else {
                     
        $s .= "<option value=\"{$node['id']}\"";
                       
        $s .= (isset($_POST['Categories']) && $_POST['Categories'] == $node['id'])?" selected ":"";
                       
        $s .= ">$spaces{$node['kategorie']}</option>";
          }


        das script hab ich mir mal für eine rekursiv befüllte combo-box gemacht, vielleleicht hilft das ja als denkanstoß

        Kommentar


        • #5
          Rekursion allgemein:
          Du hast ein Problem für n und kennst einen Dummen, der das gleiche Problem für n-1 lösen kann

          Rekursion hier: Du legst die oberste von x Stufen an und kennst einen, der das für die restlichen x-1 Stufen kann, wenn du ihm irgendwie mitgibst, wodrunter diese x-1 Stufen gehängt werden sollen

          Ergebnis:
          PHP-Code:
          function rekursives_ding($daten, &$ergebnis$start '') {
            
          Für alle Einträge in $daten:
              
          Wenn Eintrag $start anfängt:
                
          Eintrag als Array mit den Indizes text (Eintragund inhalt (neues Array) hinzufügen
                rekursives_ding
          ($datenNeuer Eintrag['inhalt'], Neuer Eintrag['text']);

          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Dank erstmal.. hatte glaube ich etwas den Durchblick verloren . Nach einer Pause, eueren Tipps und etwas Überdenken sollte es jetzt klappen!

            Kommentar


            • #7
              btw.

              bei der tabellenstruktur musst ja quasi itterativ und rekursiv vorgehen, weil so wie ich das vermute kann ja jede ebene n ebenen besitzen und auf jeder ebene können sich n ebenen befinden...

              Wenn du diese struktur also häufig anzeigen musst, dann würde ich dir auch gleich 'nen caching mechanismus empfehlen, bevor du für diese Ausgabe 'n paar hundert selects abwerfen musst und dir die Seite ausbremst.

              Kommentar


              • #8
                Du siehst das genau richtig soll eigentlich ein normales Menu werden wie z.b. "Datei" oder "Favourits" (Die Tabellen etc. werden per DHTML ein oder ausgeplendet). Ich wollte eigentlich nur ein Select absetzen und das Ganze in ein Array einlesen, damit das Ganze nicht ganz so fest die Datenbank beansprucht.
                Du scheinst aber zimlich genau zu verstehen was ich will. Ist noch ein weiter weg vor mir

                Kommentar


                • #9
                  Original geschrieben von mrhappiness
                  Rekursion allgemein:
                  Du hast ein Problem für n und kennst einen Dummen, der das gleiche Problem für n-1 lösen kann
                  OffTopic:
                  ... klingt aber mehr nach Induktionsbeweis ...

                  Kommentar


                  • #10
                    OffTopic:
                    Jein

                    Türme von Hanoi:
                    Ich muss einen Turm bestehend aus 5 (n) Scheiben umschichten.
                    Das kann ich nicht, aber ich kenne einen, der einen Turm bestehend aus 4 (n-1) Scheiben umschichten kann.
                    Also lege ich die oberste Scheibe auf einen Hilfsplatz und lasse den anderen den restlichen Turm (4 (n-1) Scheiben) umschichten, danach lege ich die Scheibe, die ich weggenommen habe, wieder drauf.


                    Hier:
                    Ich muss eine Hierarchie bestehend aus n Stufen in ein mehrdimensionales Array abbilden.
                    Dass kann ich nicht, aber ich kenne einen, der mir eine Hierarchie bestehend aus n-1 Stufen in ein mehrdimensionales Array abbildet.
                    Also erzeuge ich die für mich oberste Ebene und lasse dann den anderen die n-1 Stufen der Hierarchie, die dadrunter gehören, abbilden.

                    "Das Problem ist für n-1 bereits gelöst", und "Der Sachverhalt gilt für n, also gilt er auch für n+1" sind zwei verschiedene Sachen, das erste ist eine Rekursion,das zweite ist eine Aussage (Induktion) und muss bewiesen werden
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      OffTopic:
                      happy ... du kl**sch**ß** ... ich sagte ja auch: klingt nach ... und nicht: ist, o.ä.

                      Kommentar


                      • #12
                        danke für eure hilfe. habe da noch was interessantes gefunden : DB_NestedSet

                        Kommentar


                        • #13
                          klingt auch net so doof, aber mal die frage, wie häufig wird sich die Struktur ändern?

                          Falls es eher selten der Fall sein wird, nachdem du sie einmal erstellt hast, würde es sich echt anbieten, die Struktur in 'nem Cachefile abzubilden und dann z.B. mittels "eval()" einmal in den RAM zu drücken.

                          Kommentar


                          • #14
                            Die struktur ändert sich täglich mehrmals...

                            Kommentar


                            • #15
                              hmm... dann macht's nur bedingt sinn, seh ich ein.

                              Kommentar

                              Lädt...
                              X