php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.07.2004, 09:27  
Gast
 
Beiträge: n/a
Standard 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:
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.07.2004, 14:31  
Gast
 
Beiträge: n/a
Standard

Kann mir keiner weiterhelfen?
Ich verzweifle!
  Mit Zitat antworten
Alt 09.07.2004, 14:52  
Gast
 
Beiträge: n/a
Standard

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.
  Mit Zitat antworten
Alt 09.07.2004, 15:18  
Gast
 
Beiträge: n/a
Standard

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
  Mit Zitat antworten
Alt 09.07.2004, 15:27  
Gast
 
Beiträge: n/a
Standard

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.
  Mit Zitat antworten
Alt 09.07.2004, 15:29  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von -->bigJay<--
[...]
Dann zurück: 5 zu 4; 4 zu 3; 3 zu 2; [...]
Zurück? Ist das Sinn der Sache?
  Mit Zitat antworten
Alt 09.07.2004, 15:33  
Gast
 
Beiträge: n/a
Standard

Zitat:
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
  Mit Zitat antworten
Alt 09.07.2004, 15:37  
Gast
 
Beiträge: n/a
Standard

@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
  Mit Zitat antworten
Alt 09.07.2004, 15:39  
Gast
 
Beiträge: n/a
Standard

Zitat:
Du versuchst gerade, nested set nachzuempfinden. Spare Dir die Zeit und lies Dir das durch:
Danke für den Tipp. Habe ich nicht gekannt
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
funktion soll funktion aufrufen, welche datei einbindet PHP Tipps 2006 12 13.03.2006 18:31
[Erledigt] Zugriff auf eine Klasse innerhalb einer Funktion -&amp;amp;gt; Fehle PHP-Fortgeschrittene 23 05.02.2006 13:02
aus einer funktion auf funktion anderer klasse zugreifen seejay PHP Tipps 2006 3 05.01.2006 10:37
Array in rekursiver Funktion auslesen Gumfuzi PHP Tipps 2007 17 15.11.2005 12:01
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
replace in Funktion PHP Tipps 2005-2 1 22.08.2005 22:01
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
[Erledigt] Return mit rekursiver Funktion PHP-Fortgeschrittene 5 28.09.2004 13:35
Rekursive Funktion ... finde fehler nicht ... PHP-Fortgeschrittene 1 27.09.2004 03:44
Funktion in einer Funktion suter PHP Tipps 2004 14 07.09.2004 09:39
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
[Erledigt] Referenz auf Funktion übergeben PHP-Fortgeschrittene 7 20.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
rekursion nachvollziehen, rekursion nachvollziehen wie, php rekursive funktion zugriff auf $this, rekursion ergebnis merken php, rekursive funktion rückgabewert, rekursion struktur, php return in rekursiver funktion, rekursive funktion strukturbaum, ich verstehe die rekursion nicht in sql, rekursive funktion probleme, php rekursive funktion bcuhstaben

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:28 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.