return in rekursiver funktion
romy
- php
Hi,
ich habe in php.net eine kleine Funktion gefunden und sie auf meine Bedürfnisse angepasst.
Leider führt sie das return nicht richtig aus
<code>
function array_search_r($needle, $haystack){
$i=0;
while($i<count($haystack)){
if(is_array($haystack[$i])) {
$match=array_search_r($needle, $haystack[$i]);
}
if($haystack[$i]==$needle) {
$match = $i;
if($match!==false) {
return $match;
}
}
$i++;
}
return false;
}
</code>
ich bekomme immer false zurück, obwohl die Funktion bei entsprechendne Werten in den if-zweig, der das andere return beinhaltet, reinspringt. Aber er scheint trotzdem bis zum Ende durchzugehen. Ein exit; hat nicht geholfen.
Aber es sollte doch eine einfache Lösung geben, oder nicht?
ciao\nromy
Hi,
Hi,
ich habe in php.net eine kleine Funktion gefunden und sie auf meine Bedürfnisse angepasst.
Leider führt sie das return nicht richtig aus
function array_search_r($needle, $haystack)
{
$i=0;
while($i<count($haystack))
{
if(is_array($haystack[$i]))
{
$match=array_search_r($needle, $haystack[$i]);
//Egal was der rekursive Aufruf zurückliefert - es wird NIEMALS zurückgegeben
//hier müßte m.E. die Abprüfung auf false erfolgen und ggf. $match zurückgegeben werden.
}
if($haystack[$i]==$needle)
{
//$i ist nur ein Zähler, der Werte von 0 bis count($haystack) annehmen kann
//$match ist hier also immer eine Zahl und niemals false. Die Abprüfung auf false ist sinnlos.
//die folgenden 4 Zeilen sind identisch mit return $i
$match = $i;
if($match!==false)
{
return $match;
}
}
$i++;
}
return false;
}
Ach ja, sauberes Einrücken erleichtert es ganz wesentlich, die Codestruktur zu erkennen...
cu,
Andreas
Hi Andreas,
$match=array_search_r($needle, $haystack[$i]);
//Egal was der rekursive Aufruf zurückliefert - es wird NIEMALS zurückgegeben
//hier müßte m.E. die Abprüfung auf false erfolgen und ggf. $match zurückgegeben werden.
okay, aber wo bleibt dann die Prüfung auf Gleichheit, wenn ich nach dem Aufruf schon return ausführe?
}
if($haystack[$i]==$needle)
{
meinst Du es so?
<code>
function array_search_r($needle, $haystack){
$i=0;
while($i<count($haystack)){
if(is_array($haystack[$i])) {
$match=array_search_r($needle, $haystack[$i]);
if($match!==false) return $match;
}
if($haystack[$i]==$needle) return $i;
}
$i++;
}
return false;
}
</code>
Ach ja, sauberes Einrücken erleichtert es ganz wesentlich, die Codestruktur zu erkennen...
ich habe es auch eingerückt, aber ich finde es immer etwas problematisch beim posten, da alles verzerrt dargestellt wird und ich die tab-Taste nicht zur Verfügung habe. Beim Einrücken mittels Leerzeichen verzähle ich mich immer. ;)
ciao
romy
Hi,
[...] und ich die tab-Taste nicht zur Verfügung habe.
Copy & Paste
Cheatah
Hi,
Ach ja, sauberes Einrücken erleichtert es ganz wesentlich, die Codestruktur zu erkennen...
darf ich an dieser Stelle mal Python empfehlen? :-)
Cheatah