Problem mit rekursiver FUnktion

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

  • Problem mit rekursiver FUnktion

    Hallo liebe PHP'ler,

    steh hier grad etwas im Regen mit einer Funktion und bräuchte dringend eine Lösung, bzw. Inspiration für folgendes Problem:

    Ich hab eine rekursive Funktion, welche einen beliebig verschachtelten Hierarchiebaum (Navigation) zusammen zu bauen.

    Die Funktion funktioniert soweit einwandfrei - NUR: ich müsste wissen, wann der Baum abgearbeitet ist, bzw. wann die Funktion verlassen wird, um eine neue Funktion aufzurufen!

    Hier die Funktion:
    PHP-Code:
    function generate_menu($parent){    
                       
        
    $has_childs false;
                    
        global 
    $menu_array;        

        foreach(
    $menu_array as $key => $value){                
                            
            if (
    $value['parent'] == $parent){ 
                                  
                if (
    $has_childs === false){                                
                    
    $has_childs true;                                
                    
    $menu1_str .= '<ul>';                        
                }                        
                    
                if (!empty(
    $value['nav_title'])) {
                    
    $title_show $value['nav_title'] . " (id=".$value['uid'].")";
                } else {
                    
    $title_show $value['name'] . " (id=".$value['uid'].")";
                }
                    
                
    $menu1_str .= '<li><a href="#">'.$value['name'].'</a></li>';
                    
    generate_menu($key);                        
                    
            }
            
        }
        
        if (
    $has_childs === true) {
            echo 
    '</ul>'
        }
        
    }
    generate_menu(0); 
    Kann mir da jemand einen Tipp geben, wie ich da weiter komme?

    Vielen Dank schon mal und schönen Tag soweit ;-)
    Manuel

  • #2
    1. global ist böse!
    2. Die Funktion ist zu Ende, wenn sie zurückkehrt! Das ist bei allen rekursiven Funktionen Prinzip bedingt so.
    Wir werden alle sterben

    Kommentar


    • #3
      Hallo combie,

      danke für die schnelle Antwort!

      Was heisst "...ist zu Ende, wenn sie zurückkehrt..." genau? (bin nicht nicht so der PHP crack...)

      Mein Problem ist in erster Linie, dass ich irgendwo den Funktionsaufruf
      PHP-Code:
      generate_content() 
      platzieren muss, sobald eben der String "$menu1_str" generiert worden ist - und nicht weiss wo.

      Kannst du mir da noch nen Tipp geben?

      Danke schon mal und Gruss,
      Manuel

      Kommentar


      • #4
        Was heisst "...ist zu Ende, wenn sie zurückkehrt..." genau?
        Das heißt genau das was ich geschrieben habe!

        Warum fragst du nicht den Programmierer, welcher dir das geschrieben hat?
        Denn du warst das ja offensichtlich nicht selber.

        PS:
        $menu1_str kommt aus dem Nirvana und verschwindet auch wieder dort.
        $menu1_str ist außerhalb der Funktion nicht verfügbar
        Selbst zwischen der Rekursionsebenen wird sie nicht übertragen.
        Zuletzt geändert von combie; 13.04.2011, 09:11.
        Wir werden alle sterben

        Kommentar


        • #5
          Danke für die Hilfsbereitschaft, konnte das Problem inzwischen lösen.
          Schönen Tag und Gruss,
          manuel

          Kommentar


          • #6
            ... wenn du die Lösung hier postest, dann haben auch zukünftige Foren-Besucher noch etwas davon...

            Kommentar


            • #7
              Hallo,

              ein Beispiel für eine solche Funktion gibt es hier.

              Gruß,

              Amica
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar

              Lädt...
              X