Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Rekursive Funktion tut nicht richtig???

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Rekursive Funktion tut nicht richtig???

    Hallo alle zusammen!!!

    Ich möchte eine Menüstruktur erstellen. Leider funktioniert meine rekursive Funktion nicht so wie ich will.
    So sieht meine DB aus:
    Code:
    mid       Eintrag        vater
    1           Auto          0
    2       Innenraum         1
    3          Sitze          2
    4         Lenkrad         2
    5        Wohnung          0
    6          Küche          5
    7           Herd          6
    8         Messer          6
    9          Hitze          7
    10       Sport            3
    11       Gabel            6
    12        Felgen          1
    13       Stoff            10
    14       Balkon           5
    15       Motor            1
    mid=ID; eintrag=der Begriff; vater=Bezugsnummer
    So und jetzt der Code den ich zusammengeschrieben habe:
    Code:
    <?php
    	$verbindung1 = mysql_connect ("localhost", "root", "");
    	$ergebnis = mysql_db_query ("struktur", "SELECT * from struktur", $verbindung1);
    	for ($i=0; $i<mysql_num_rows($ergebnis); $i++){
    	$felder = mysql_fetch_array($ergebnis);
    	list($mid,$eintrag,$vater) = $felder;
    	if ($vater==0) {                          //entweder Hauptpunkte oder Unterpunkte
    	$containHP[] = $felder;
    	} else {$containUP[] = $felder;}
    }
    
    function struktur($zeichen, $IDii) {
    					global $containUP;
    	
    		for ($u=0; $u<count($containUP); $u++) {
    			$test2 = $containUP[$u];
    				
    			if ($test2["vater"]==$IDii) {
    				echo $zeichen.$test2["eintrag"]."
    "; //unterpunkt ausgeben
    				$zeichen="...".$zeichen;  //je witer in die rekursive desto mehr zeichen
    				$IDii = $test2["mid"]; //id merken
    				array_splice ($containUP[$u], 0); //das array leeren
    				struktur($zeichen, $IDii); //in die rekursive
    			}
    		}
    	}
    
    	
    	$zeichen="...";
    	for ($i=0; $i<count($containHP); $i++) {
    	$test = $containHP[$i];
    		if ($test["vater"]==0) {
    		echo "".$test["eintrag"]."
    ".""; //hauptpunkt ausgeben
    			$IDii=$test["mid"]; //id merken
    			 struktur($zeichen, $IDii); //Funktion aufrufen
    
    	}
    }
    So sieht dann mein Ergebnis aus:
    Auto
    ...Innenraum
    ......Sitze
    .........Sport
    ............Stoff
    ......Lenkrad
    ...Felgen
    Wohnung
    ...Küche
    ......Herd
    .........Hitze
    ......Messer
    ...Balkon
    Er lässt Motor und Gebel aus.
    Und das hier sollte er eigentlich Anzeigen:
    Auto
    ...Innenraum
    ......Sitze
    .........Sport
    ............Stoff
    ......Lenkrad
    ...Felgen
    ...Motor
    Wohnung
    ...Küche
    ......Herd
    .........Hitze
    ......Messer
    ......Gabel
    ...Balkon

    Aus einem mir unverständlichem Grund gibt er zu einem Punkt nur zwei Unterpunkte aus, den dritten / die weiteren lässt er aus. Leider komme ich nicht drauf was ich falsch gemacht habe.
    Kann mir jemand erklären was da falsch ist?

    Bitte Hilfe und schon mal Danke an alle!!! :wink:


  • #2
    Kann mir keiner weiterhelfen?
    Ich verzweifle!

    Kommentar


    • #3
      Der Code enthält zuviele irrelevante Zeilen. Außerdem zu wenig beschreibende Kommentare. Und selbst schnell einen schreiben will ich momentan nicht. Den Grundaufbau einer Rekursion scheinst du ja verstanden zu haben.

      Kommentar


      • #4
        Ich habe es zwar begriffen, aber anscheinend noch nicht ganz.

        Wenn ich das jetzt richtig nachverfolgt habe sieht der "Baum" in etwa so aus

        Also: Er geht von 1 zu 2; 2 zu 3; 3 zu 4; 4 zu 5;
        Dann zurück: 5 zu 4; 4 zu 3; 3 zu 2;
        findet noch was; 2 zu 6;
        UND JETZT PASSIERTS --> er geht nicht mehr zu 2 sondern überspringt sie und geht gleich zu 1. Und das passiert immer wenn ein Punkt (2) zwei oder mehr Zweige hat (3, 6).
        Deswegen gibt er die 8 auch nicht mehr aus: Sie ist auf die 1 bezogen, aber die 1 hat schon 2 Zweige.
        ???
        Ich verstehe es einfach nicht Normal dürfte das nicht sein oder?

        Ich hofe das ist jetzt verständlicher. HELP

        Kommentar


        • #5
          Fang' doch erstmal klein an. Bilde nur 1 Ebene und fülle sie mit ein paar Einträgen. Darauf prüfst du deine Rekursion. Dann nimm eine Ebene hinzu und prüfe wieder. Das beschriebene Problem sollte hier schon auftauchen. Und mit insgesamt 5 Einträgen kannst du das "Fehlverhalten" der Rekursion selbst nachvollziehen, indem du Eintrag für Eintrag manuell durchläufst.

          Kommentar


          • #6
            Zitat von -->bigJay<--
            [...]
            Dann zurück: 5 zu 4; 4 zu 3; 3 zu 2; [...]
            Zurück? Ist das Sinn der Sache?

            Kommentar


            • #7
              Zitat von -->bigJay<--
              Ich habe es zwar begriffen, aber anscheinend noch nicht ganz.
              Du versuchst gerade, nested set nachzuempfinden. Spare Dir die Zeit und lies Dir das durch:
              http://www.google.de/search?sourceid...2nested+set%22

              Kommentar


              • #8
                @Saraneus

                Du meinst so:
                erster Satz=1
                Dann alle Zugehörigen durchsuchen und darstellen (2,7,
                Dann würde es so aussehen:
                1
                ...2
                ...7
                ...8
                ......3
                ......6
                .........4
                .........5
                Und das ist ja falsch

                Kommentar


                • #9
                  Du versuchst gerade, nested set nachzuempfinden. Spare Dir die Zeit und lies Dir das durch:
                  Danke für den Tipp. Habe ich nicht gekannt

                  Kommentar

                  Lädt...
                  X