Ankündigung

Einklappen
Keine Ankündigung bisher.

Rekursive Funktion bricht ab...

Einklappen

Neue Werbung 2019

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

  • Rekursive Funktion bricht ab...

    Hallo zusammen!

    Ich verzweifel gerade... Folgendes Problem:

    Für ein Menu, welches aus einer Datenbank generiert werden soll, benutz ich eine rekursive Funktion, da ich halt vorher nicht weiss, wie viele ebenen das Menu jeweils hat! hier der Code der funktion:


    Code:
    function generate_menu($sub_of = "0", $parent_dir = "", $ebene = "1")
      {
      global $conn;
      global $tpl;
      $sql = "SELECT id, sub_exists, name, link_title, description FROM 08_menu WHERE sub_of = '$sub_of' ORDER BY rangfolge";
      $rs = mysql_query($sql,$conn);
      while ($row = mysql_fetch_array($rs,MYSQL_ASSOC))
        {
        $parent = $parent_dir;
        $parent .= $row[name]."/";
        $tpl->replace("link_title",$row[link_title]);
        $tpl->replace("link_name",$parent);
        $output .= $tpl->getoutput("navi_link_bit".$ebene);
        if($row[sub_exists] == 1)
          {
          $output .= generate_menu($row[id],$parent,$ebene++);
          }
        }
      return $output;
      }


    solange ich nicht rekursiv arbeite, funktioniert die funktion wunderbar, es gibt mir die Links der ersten ebene schick aus!
    Sobald ich aber die generate_menu() mit den entsprechenden werten (welche also alle submenus der entprechenden id sucht) werden die Submenus auch wunderbar ausgegeben, leider aber immer nur das erste... danach bricht er die übergeordnete funktion ab!
    ein zurückspringen auf die ebene davor erfolgt also nicht mehr...

    also statt

    -link 1
    --sub_1
    ---sub_sub1
    --sub_2
    -link2
    -link2

    #macht er nur noch:

    -link 1
    --sub_1
    ---sub_sub1

    und hört dann auf

    hab ich irgendwas übersehen oder funktionert das ganze - so wie ich es mir vorstelle - gar nicht?
    arbeite zum ersten mal mit ner rekursiven funktion, deswegen weiss ich halt nicht, obs n grundsätzlicher fehler ist oder ich einfach nur was falsch gemacht habe!

    mfg
    und vielen dank im Vorraus!
    Duras

  • #2
    $output .= generate_menu($row[id],$parent,$ebene++);
    sicher $ebene ++ und nicht eher $ebene+1 ?

    Kommentar


    • #3
      hab gerade keinen zugriff drauf, kann es nicht testen, da es auf meinem localhost liegt, aber in welcher form könnte das denn die funktion abbrechen? die $ebene wird (bis auf für die ausgabe des richtigen templates) ja nicht gebraucht...
      also, ich werds heute abend mal testen, danke auf jeden fall schonmal für den hinweis!
      melde mich dann wenn ich mehr weiss

      mfg
      Duras

      Kommentar


      • #4
        so gehts

        1000 dank...

        aber ich frag mich warum? theoretisch wird an die funktion doch der gleiche wert übergeben, und ob $ebene in der parent-funktion jetzt 1 oder 2 ist sollte doch eigentlich egal sein, oder?

        Kommentar


        • #5
          PHP-Code:
          <?php
          function a($x)
          {
              echo 
          'x=' $x;
          }
          $n=0;
          a($n++);
          ?>
          x=0
          Deshalb heißt der Operator post-increment.

          Kommentar


          • #6
            ja, das ist mir schon klar...

            was mir aber nicht klar ist, warum die parent-funktion nicht mehr weiterläuft!

            die $ebene wird ja quasi nicht mehr gebraucht... aber is auch eigentlich egal, läuft ja jetzt und ich weiss in zukunft, wie ichs machen muss

            Kommentar


            • #7
              Zitat von duras666
              aber ich frag mich warum? theoretisch wird an die funktion doch der gleiche wert übergeben
              Das ist nicht der Fall.

              Kommentar


              • #8
                Zitat von duras666 Beitrag anzeigen
                ja, das ist mir schon klar...
                was mir aber nicht klar ist, warum die parent-funktion nicht mehr weiterläuft!
                Du solltest Dir wirklich mal genau anschauen, was '++' und '--' tun.
                PHP-Code:
                bla($a++); 
                tut das gleiche wie
                PHP-Code:
                bla($a);
                $a $a 1
                und wieder mal: wahrlich kein Profi-Problem

                Kommentar


                • #10
                  Zitat von nobswolf Beitrag anzeigen
                  Du solltest Dir wirklich mal genau anschauen, was '++' und '--' tun.
                  Interessant ist ja auch der Unterschied von
                  PHP-Code:
                  $ebene ++;
                  // und
                  ++ $ebene
                  Mit letzterem hätte die Funktion auch funktioniert.
                  Gruss
                  L

                  Kommentar

                  Lädt...
                  X