romy: return in rekursiver funktion

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

  1. 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

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. 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

      1. Hi,

        [...] und ich die tab-Taste nicht zur Verfügung habe.

        Copy & Paste

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
    2. Hi,

      Ach ja, sauberes Einrücken erleichtert es ganz wesentlich, die Codestruktur zu erkennen...

      darf ich an dieser Stelle mal Python empfehlen? :-)

      Cheatah

      --
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes