return bei Rekursiven Funktionen
Hannah
- php
0 bleicher0 Hannah0 Brillo Agent Nr. 10 Hannah
0 Hopsel0 dedlfix0 Bademeister
Hey!!
Ich habe eine Rekursive Funktion und möchte beim letzten Durchlauf per "return" den wert erhalten der ermittelt wurde. Doch leider liefert mir "return" immer nur den wert des ersten Durchlaufs also noch bevor überhaupt eine Rekursion gestartet wurde.
Wie komme ich an den Wert des letzten Durchlaufs WENN kein weiterer Aufruf mehr "möglich" ist innerhalb der Funktion?
Danke!
Hannah
Grüße,
von deiner Beschreibung her hast du Rekursion nicht verstanden, du musst Rekursion verstehen bevor du Rekursion verstehen kannst.
Und du musst Codebeispiele bringen damit Codebeispiele begutachtet und korrigiert werden können.
MFG
bleicher
Hi,
Ja das glaube ich auch ^^
Es geht darum den Papa der Kinder zu ermitteln
function father_of_child($id){
$re = qry("SELECT ref,id FROM menu WHERE id='".$id."'",true);
#echo "#ref".$re[0][ref]."-id".$re[0][id];
if ($re[0][ref] == 0) echo $re[0][id];
else father_of_child($re[0][ref]);
}
(Erläuterung zu qry(): qry() liefert mir direkt ein array mit den Inhalten des SELECTs)
Im Prinzip habe ich das schon verstanden.
Wenn ich anstelle des returns ein echo schreibe, bekomme ich was ich will.
Hannah
Hi,
welche Werte kann "ref" annehmen?
Gruß
brillo
Hi,
welche Werte kann "ref" annehmen?
Dahinter steckt ganz einfach eine MySQL-Tabelle.
In etwa so
id | ref | whatever
1 | 0 | whatever
2 | 0 | whatever
3 | 1 | Kind von id 1
4 | 1 | Kind von id 1
5 | 4 | Kind von id 4, Kind von id 1
6 | 4 | Kind von id 4, Kind von id 1
7 | 0 | whatever
Hannah
Hi Hannah!
Wenn du return
verwendest, darfst du den Rückgabewert nicht nur in der äußersten Funktionsinstanz zurückgeben, sondern musst ihn durch alle Aufrufe durchreichen. Ein kleines weiteres return
bewirkt Wunder. =)
Außerdem solltest du Strings auch als solche Kennzeichnen.
MfG H☼psel
aaaah
function father_of_child($id){
$re = qry("SELECT ref,id FROM menu WHERE id='".$id."'",true);
if ($re[0][ref] == 0) return $re[0][id];
else return father_of_child($re[0][ref]);
}
Danke!
Hi Hannah!
Danke!
Bitte! =)
Aber beachte auch meinen zweiten Hinweis:
Außerdem solltest du Strings auch als solche Kennzeichnen.
Du kannst ja auch einfach mal kurz das Fehlerverhalten deiner PHP-Installation etwas höher drehen. =)
MfG H☼psel
Hi!
Es geht darum den Papa der Kinder zu ermitteln
Und wozu brauchst du da Rekursion?
if ($re[0][ref] == 0) echo $re[0][id];
else father_of_child($re[0][ref]);
Wenn der else-Zweig abgearbeitet wird, was passiert dann mit dem Rückgabewert von father_of_child()? Nichts, er wird verworfen. Anschließend ist die Funktion zu Ende und liefert ein null an ihren Aufrufer.
Lo!
Hi Hannah.
Ich habe eine Rekursive Funktion [...]
Es geht darum den Papa der Kinder zu ermitteln
Wenn Du dafuer ne Rekursion brauchst, dann liegt in der Familie aber einiges im Argen. ;-)
Was ich eigentlich sagen wollte: Deine Funktion (so sie denn repariert ist, das ist ja weiter unten nun geschehen) bestimmt nicht den Vater, sondern den "aeltesten Vorfahren". Du solltest ihr unbedingt(!) einen passenderen Namen geben.
Viele Gruesse,
der Bademeister