Entwicklung einer Downloaddatenbank, Probleme mit Kategorien

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

  • #46
    wo soll der rekursive aufruf von output() hin? er fehlt noch. schau noch mal in den pseudocode.

    Kommentar


    • #47
      Also kommt er doch nochmal in die while-Schleife, oder was? Ich bin völlig verwirrt.

      Du hast in wie schon erwähnt zweimal. einmal als Initial-Aufruf, der ja nun außerhalb der while-Schleife mit den Werten $cat_arr,0,3 aufgerufen wird.

      Jetzt muss er nochmal in die while-Schleife mit den Werten $cat_arr,$pid,3, oder wie? Warum nochmal $tiefe+1?

      Kommentar


      • #48
        Jetzt muss er nochmal in die while-Schleife mit den Werten $cat_arr,$pid,3, oder wie?
        nein, lies den pseudocode _aufmerksam_ durch.

        output ist eine rekursive funktion. d.h. sie ruft sich selbst auf.

        und außerdem sind die parameter wichtig.

        Kommentar


        • #49
          Okay, das ist das mit dem void output(), oder?

          Das kommt dann wohin? Über den Initial-Aufruf und unter die while-Schleife? Kannst du mir jetzt nicht anhand meiner Variablen die fehlenden Werte geben?

          Kommentar


          • #50
            nein. die funktion output ruft sich selbst auf, mehr ist es nicht und genau so steht es in dem pseudocode. du musst es nur noch umsetzen.

            Kommentar


            • #51
              Ich verstehs immer noch nicht. Dein Pseydo-Code sieht doch folgendermaßen aus:

              Code:
              void output(array baum, int pid, int tiefe)
              {
                 für jeden knoten aus dem baum mit pid wiederhole
                 {
                    print "tiefe"-mal leereichen zum einrücken
                    print knoten_name
                    output(baum, knoten_id, tiefe+1)
                 }
              }
              
              //Initial-Aufruf
              
              output(baum, 0, 0)
              - In dem Fall ist doch "array baum" durch $cat_arr, int pid durch $pid und int tiefe durch 3 ersetzt.
              - Für die Zeile "für jeden knoten aus dem Baum" habe ich doch die foreach-Schleife gebaut.
              - Das "print "tiefe"-mal..." ist die for-Schleife.
              - "print knoten_name" ist doch "print $value["kategorie"].'<br>';"
              - Ja, und dann hast Du noch "output(baum, knoten_id, tiefe+1)" aber innerhalb der foreach-Schleife.

              Lös es doch bitte auf. Kann vorher wahrscheinlich nicht schlafen.

              Kommentar


              • #52
                Ja, und dann hast Du noch "output(baum, knoten_id, tiefe+1)" aber innerhalb der foreach-Schleife.
                und genau das ist das, was dir noch fehlt.

                Kommentar


                • #53
                  so?

                  while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
                  {

                  $id = $row["id"];
                  $pid = $row["pid"];
                  $kategorie = $row["kategorie"];

                  $cat_arr[$arr_count] = array();
                  $cat_arr[$arr_count]['id'] = $id;
                  $cat_arr[$arr_count]['pid'] = $pid;
                  $cat_arr[$arr_count]['kategorie'] = $kategorie;

                  $arr_count = $arr_count + 1;
                  output($cat_arr,$arr_count,$tiefe+1);

                  }

                  output($cat_arr,0,0);

                  Kommentar


                  • #54
                    wohin damit?
                    zweites parameter ist noch falsch.

                    Kommentar


                    • #55
                      Ich habe es jetzt wieder in die while-Schleife gesetzt. Ich habe aber absolut keine Idee, welches der zweite Parameter ist. Dachte die Knoten-ID wäre richtig.

                      Kommentar


                      • #56
                        ja. id. und nicht pid. oder was auch immer.

                        und output gehört _nicht_ in die whileschleife, sondern in die funkton output. aber das ist auch das letzte mal, dass ich das wiederholt habe.

                        Kommentar


                        • #57
                          Ja, so durch den Wind bin ich schon. Ja, nicht in die while-Schleife. Okay. Es sieht nun folgendermaßen aus:

                          PHP-Code:
                              $arr_count 0;
                              
                          $cat_arr = array();
                              
                              
                          $sql "SELECT * FROM kategorien ORDER BY id, pid;";
                              
                          $result mysql_query($sql) or die(mysql_error());
                              while (
                          $row mysql_fetch_array($resultMYSQL_ASSOC))
                              {
                              
                                 
                          $id $row["id"];
                                 
                          $pid $row["pid"];
                                 
                          $kategorie $row["kategorie"];
                              
                                 
                          $cat_arr[$arr_count] = array();
                                 
                          $cat_arr[$arr_count]['id'] = $id;
                                 
                          $cat_arr[$arr_count]['pid'] = $pid;
                                 
                          $cat_arr[$arr_count]['kategorie'] = $kategorie;
                              
                                 
                          $arr_count $arr_count 1;
                                 
                              }
                              
                              
                          output($cat_arr,0,0);
                              
                          }
                              
                          function 
                          output($cat_arr$id$tiefe)
                          {
                              foreach (
                          $cat_arr as $value)
                              {
                                  if (
                          $value["pid"] == $pid)
                                  {
                                  for (
                          $leer 1$leer <= $tiefe$leer++)
                                  {
                                      print 
                          "&nbsp;";
                                  } 
                                 print 
                          $value["kategorie"].'<br>';
                              }
                            }
                            
                          output($cat_arr,$id,$tiefe+1);

                          Es stimmt aber immer noch was nicht. Bekomme folgende Ausgabe.

                          Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) [2] => Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) [2] => Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) [3] => Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) [2] => Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) [3] => Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) [4] => Array ( [id] => 5 [pid] => 3 [kategorie] => Microsoft ) ) Array ( [0] => Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) [1] => Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) [2] => Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) [3] => Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) [4] => Array ( [id] => 5 [pid] => 3 [kategorie] => Microsoft ) [5] => Array ( [id] => 6 [pid] => 2 [kategorie] => PDF ) ) STAMM

                          Ich weiß, ich habe deine Nerven sehr stark strapaziert. Dafür schon mal danke. Was ist jetzt noch falsch?

                          Kommentar


                          • #58
                            der rekursive aufruf soll ins foreach.

                            Kommentar


                            • #59
                              Das hatte ich davor und habe es nicht gepostet. habe es direkt unter die Zeile "print $value["kategorie"].'<br>';" und auch einmal noch eins tiefer außerhalb der for-Schleife gesetzt.

                              Dann bekomme ich aber nur eine leere Ausgabe.

                              Kommentar


                              • #60
                                und woher soll $id kommen?

                                Kommentar

                                Lädt...
                                X