return in rekursiver Funktion
Julian123
- php
Hallo,
ich habe folgendes Problem und ich beginne irgendwie zu verzweifeln.
Ich habe folgende Funktion
function baum($seiteId, $string) {
$baum_query = mysql_query("SELECT id, seiteId FROM $tabel WHERE id='".$seiteId."';") OR die(mysql_error());
$baum = mysql_fetch_array($baum_query);
if ($baum["seiteId"] != 1) {
if ($string == '')
$string = $baum["seiteId"];
else
$string = $string.",".$baum["seiteId"];
baum($baum["seiteId"], $string);
}
else {
echo "ja ich gehe hier rein";
echo "<br>und habe den string: ".$string;
return $string;
}
}
Nun möchte ich mit
echo baum(Wert1, Wert2)
den Wert von $string ausgeben, geht aber nicht =/
Habt ihr eine Idee wieso?
Lg
Julian
$baum = mysql_fetch_array($baum_query);
=> $baum ist ein array!
if ($baum["seiteId"] != 1) {
$baum["seiteId"] gibts nicht. Der "erste" Wert ist $baum[0]["seiteId"]
Gruß, Samoht
$baum = mysql_fetch_array($baum_query);
=> $baum ist ein array!
richtig
if ($baum["seiteId"] != 1) {
$baum["seiteId"] gibts nicht. Der "erste" Wert ist $baum[0]["seiteId"]
falsch, da es ein assoziatives Array erzeugt.
Damit ist mein Problem leider noch nicht gelöst =/
Lg
Julian
$baum = mysql_fetch_array($baum_query);
$baum["seiteId"] gibts nicht. Der "erste" Wert ist $baum[0]["seiteId"]
falsch, da es ein assoziatives Array erzeugt.
mysql_fetch_array() hat 2 parameter - query als string und dann die ausgabeform
MYSQL_NUM, MYSQL_ASSOC und MYSQL_BOTH sind möglich BOTH ist der default wert
du erzeugst also ein array assoziatives array welches zugleich alle werte doppelt mit nummern hinterlegt hat - das ist etwas verschwenderisch
zudem kommts auf deine abfrage an - BOTH versteht keine aliases, diese sind NUR über die nummerierten varianten und nicht über die namentlich hinterlegten keys abrufbar
besser ist MYSQL_ASSOC anzugeben, wenn du sicher sein willst ein assoziatives array zu bekommen oder gleich mysql_fetch_assoc() zu verwenden, da kann man den optionalen paramter nicht vergessen (ist von der funktionsweise ident zu mysql_fetch_array($query, MYSQL_ASSOC)
Hi,
mysql_fetch_array() hat 2 parameter - query als string und dann die ausgabeform
"Query als String" ...?
Du meinst wohl die Resource ID eines erfolgreichen mysql_query.
MfG ChrisB
Du meinst wohl die Resource ID eines erfolgreichen mysql_query.
recht hast du, die ressource aus mysql_query() - diese bekommt die abfrage als string übergeben ;)
Hello,
$baum = mysql_fetch_array($baum_query);
entschudlige bitte, wenn ich nicht auf Dein eigentliches Problem eingehe.
Ich will Dich aber auf ein anderes wichtiges aufmerksam machen.
Du erzeugst einen MySQL-Resource-Identifier
Da der außerhalb des PHP-Codes erzeugt wird, und in PHP nur in der Variablen $baum gespeichert wird, muss er separat wieder entsorgt werden. An $baum könnte schließlich ein riesiges Resultset hängen, dass viel Speicher verbraucht. MySQL weiß nichts davon, dass PHP mit dem Ende der rekursiv erzeugten Instanz der Funktion den Bezeichner wieder freigegeben hat. Nur leider kommst Du nun auch nicht mehr an das Resultset und das gammelt da nun bis zum Scriptende oder, bei Schleifen und Rekursion nicht unüblich, bis zum Crash.
Ok, dann ist das Script sicher auch zuende, aber eben nicht gewollt.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
echo $begrüßung;
function baum($seiteId, $string) {
baum($baum["seiteId"], $string);
}
[mit] echo baum(Wert1, Wert2)
den Wert von $string ausgeben, geht aber nicht =/
Habt ihr eine Idee wieso?
Siehst du das Problem, wenn ich die Funktion mal so wie oben zusammenkürze?
echo "$verabschiedung $name";
ehrlich gesagt nein, ich bin mir bewußt, dass ich die Funktion wieder aufrufe, das will ich ja schließlich auch. Ich habe das Problem nicht nur, wenn ich $string als return haben möchte, sondern mit jeder beliebigen Var. Ich bekomme einfach kein Rückgabewert für diese Funktion hin.
Ich weiß das es mit der Rekursion zusammenhängt, verstehe es nur leider nicht =/
Lg Julian
Hi,
Ich habe das Problem nicht nur, wenn ich $string als return haben möchte, sondern mit jeder beliebigen Var. Ich bekomme einfach kein Rückgabewert für diese Funktion hin.
Du nimmst beim rekursiven Aufruf deiner Funktion deren Rueckgabewert gar nicht in Empfang, sondern laesst ihn einfach im Daten-Nirwana verschimmeln.
MfG ChrisB