array in rekursiven funktion

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array in rekursiven funktion

    Ich hab echt schon ne Weile gegoogelt, aber finde keine Antwort, obwohl mein Problem bestimmt leicht zu lösen ist.


    PHP-Code:
    function get_menutree($ar_name=array(),$id,$table,$ebene
        { 
            if(
    $arr_result $this->get_results("SELECT * FROM $table WHERE id_parent=$id ORDER BY rank")) 
            { 

                foreach(
    $arr_result as $ar_result
                { 
                    
    $ar_name[$ar_result->id]=$ebene;//???DIESES ARRAY GEHT BEIM REKURSIVEN AUFRUFEN DER FUNKTION VERLOREN??? 
                    
    echo "<br>".$ebene.$ar_result->name;                 
                     
                       
    $this->get_menutree($ar_name,$ar_result->id,$table,($ebene+1)); 
                             
                }     
            } 
        return 
    $ar_name;          
        } 
    ---------------------------------
    als ausgabe bekomme ich:

    vom echo-Befehl

    1Eingang
    1Hauptmenü
    2Test1
    3test2
    1test3

    vom Array

    1
    1
    1
    ---------------------------------------
    Test1 ist in Hauptmenü
    test2 ist in Test1
    mir fehlt im array genau die Werte vom Tiefgang. Im Echo schreibt er es aber im Array fehlt es. Verliert er das Array in der rekursiven funktion?

  • #2
    Was heißt "vom Array", woher kommt diese Ausgabe und was erwartest du stattdessen?

    Kommentar


    • #3
      Ich habe bei rekursiven Funktionen die Erfahrung gemacht, dass man besser mit echo und ob_start() arbeiten sollte
      PHP-Code:
      $ret '';
      function 
      get_menutree($ar_name=array(),$id,$table,$ebene
          { 
             
      $ret '';
             
      ob_start();
              if(
      $arr_result $this->get_results("SELECT * FROM $table WHERE id_parent=$id ORDER BY rank")) 
              { 

                  foreach(
      $arr_result as $ar_result
                  { 
                      
      $ar_name[$ar_result->id]=$ebene;//???DIESES ARRAY GEHT BEIM REKURSIVEN AUFRUFEN DER FUNKTION VERLOREN??? 
                      
      echo $ebene.$ar_result->name."\r\n";                 
                       
                         
      $this->get_menutree($ar_name,$ar_result->id,$table,($ebene+1)); 
                               
                  }     
              } 
          
      $ret ob_get_contents();
          
      ob_end_clean();
          return 
      $ret;          
          } 
      So besser ?

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Ne, geht leider nicht.

        Kommentar


        • #5
          Wie sieht der Rückgabewert der Fkt aus ? Mal var_dumpen und Ergebnis anschauen. Fehlen dort die gesuchten Werte auch ?

          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            So gehts, hatte das mit der globalen Variablen aber erlich schon am Anfang versucht. Oh man.
            Hier noch den Code
            PHP-Code:
                function get_menutree($id,$table,$ebene)
                {
                 global 
            $ar_name;
                    if(
            $arr_result $this->get_results("SELECT * FROM $table WHERE id_parent=$id ORDER BY rank"))
                    {

                        foreach(
            $arr_result as $ar_result)
                        {
                            
            $ar_name[$ar_result->id]=$ebene;//???DIESES ARRAY GEHT BEIM REKURSIVEN AUFRUFEN DER FUNKTION VERLOREN???
                    
                            
                               
            $this->get_menutree($ar_result->id,$table,($ebene+1));
                                    
                        }    
                    }
                return 
            $ar_name;         
                } 
            aber dennoch vielen dank

            Kommentar


            • #7
              informiere dich über den begriff "by reference" im bezug auf parameter übergabe.

              Kommentar

              Lädt...
              X