verschachtelte Schleifen

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

  • #16
    Na zuerst mal musst du den Gruppenwechsel richtig machen. Statt $start musst du natürlich sowas wie $event["start"] verwenden.

    Dann brauchst du zwei verschachtelte foreach-Strukturen: Die äußere für die Ausgabe des Monatsnamens und die innere für die Ausgabe der Datensätze.

    Sieh dir doch nochmal ein paar Beispiele an.
    [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


    • #17
      eine letzte frage/problem

      ich habe jetzt die Veranstaltungern gruppiert,und die titel stehen an der richtigen stelle.

      aber jetzt habe ich das problem, dass ich die titel in der äußeren schleife habe und in der inneren schleife habe ich das datum und den start monat,
      PHP-Code:
          while($event=mysql_fetch_array($result)){
              
      $ev[$event["start"]][]=$event;            
          }
          
          foreach(
      $ev AS  $key=> $value){
              
              echo
      "<tr><td>Veranstaltungen im $monate[$mon]</td></tr>";
              foreach(
      $value AS $key => $val){
       
          echo
      "
          <tr class='evltop-daad'><td>
      $val[sd]</td><td>$val[d_city]</td><td>$val[d_land]</td></tr>
          <tr><td class='evintro-daad' colspan='3' valign='top'>
      $val[d_desc]</td></tr>";                
      }

      mit print_r($value[start]); bekomme ich keine ausgabe
      mit print_r($val[start]);bekomme ich den/die startmonate
      aber ich brauche sie in der äusseren schleife.

      ist es sinnvoll die monate vor den foreach schleifen mit merge_array mit einzubinden oder wie kann ich die Monate je nach startmonat ausgeben?

      Kommentar


      • #18
        Sieh dir doch deine Variablen mal an! Was steht den z. B. in $key drin? (Damit meine ich, bevor du es mal wieder überschreibst.)
        [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


        • #19
          mhh, das mit dem überschreiben ist wirklich so ne sache.
          danke. Mensch bist du geduldig. super.

          kann ich dich noch ein biischen nerven?
          soweit funktioniert das perfekt, aber wenn ich veranstaltungen habe die über mehrere monate laufen und ich will sie in jedem monat neu listen,
          muss ich dann eine neue while schleife nach $fev[ende] machen?

          ich habe folgendes probiert, aber funktioniert nicht, auch wenn ich diesmal nichts überschrieben habe:
          PHP-Code:
                  if(($val[start]<=$key)&&($val[ende]>=$key)){ 
          und dann die foreach-schleifen

          hier der ganze code um sicherzugehen das ich doch nicts überschrieben habe.:
          PHP-Code:
               while($event=mysql_fetch_array($result)){
                  
          $ev[$event["start"]][]=$event;            

              }
              if(!
          $ev){echo"<tr><td valign='top' height='400px'>Keine Veranstaltungen</td></tr>";}else{
              foreach(
          $ev AS  $key=> $value){
                  echo
          "<tr><td>Veranstaltungen im $monate[$key]</td></tr>";

                  foreach(
          $value AS  $val){
                  if((
          $val[start]<=$key)&&($val[ende]>=$key)){
                  if(
          $val[d_org]=='DAAD'){
                  
              echo
          "
              <tr class='evltop-daad'><td>
          $val[sd] - $val[ed]</td><td>$val[d_city]</td><td>$val[d_land]</td></tr>
              <tr><td class='evname' colspan='3'>
          $val[d_event]</td></tr>
              <tr><td class='evintro-daad' colspan='3' valign='top'>
          $val[d_desc]</td></tr>
              <tr><td class='evland' colspan='3' valign='top' height='40px'><a class='evweiter' href='daad-veranstaltung.php?e=
          $val[id]'>weiterlesen</a></td>
              "
          ;                
              }else{    
              echo
          "
              <tr class='evltop'><td>
          $val[sd] - $val[ed]</td><td>$val[d_city]</td><td>$val[d_land]</td></tr>
              <tr><td class='evname' colspan='3'>
          $val[d_event]</td></tr>
              <tr><td class='evintro' colspan='3' valign='top'>
          $val[d_desc]</td></tr>";
              if(
          $val[d_link])
              {echo
          "<td class='evland' colspan='3' valign='top' height='40px'><a class='evweiter' href='http://$val[d_link]' target='_blank'>weiterlesen&nbsp;</a><img src='elements/grafix/external.gif' border='0'></td>";}
              }
          }
          }
          }

          Kommentar


          • #20
            PHP-Code:
                while($event=mysql_fetch_array($result)){
                    
            $ev[$event["start"]][]=$event;
                    if (
            $event["start"] != $event["ende"]) {
                        
            $ev[$event["ende"]][]=$event;
                    }
                }
                
            // ... 
            [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


            • #21
              sorry für den umbruch,
              vielen dank funktioniert nicht ganz, aber ist nicht so wichtig, ist nur eine veranstaltung die länger geht.

              danke für deine hilfe

              Kommentar


              • #22
                Zitat von jemont Beitrag anzeigen
                funktioniert nicht ganz
                Genauer? Was funktioniert nicht?
                [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


                • #23
                  Ich bekomme nur den Anfangs- und Endmonat heraus.

                  zb
                  1. Veranstaltung geht von januar bis may
                  2. Veranstaltung von februar bis märz
                  3. Veranstaltung geht von April bis May

                  dann habe ich als ausgabe:
                  Veranstaltungen im januar
                  Veranstaltung 1
                  Veranstaltungen im May
                  Veranstaltung 1
                  Veranstaltung 3
                  Veranstaltungen im Februar
                  Veranstaltung 2
                  ...
                  Veranstaltungen im April
                  Veranstaltung 3

                  PHP-Code:
                       while($event=mysql_fetch_array($result)){
                          
                  $ev[$event["start"]][]=$event;
                          if (
                  $event["start"] != $event["ende"]) {
                              
                  $ev[$event["ende"]][]=$event;
                          }
                      } 
                        foreach(
                  $ev AS  $key=> $value){
                          echo
                  "<tr><td>Veranstaltungen im $monate[$key]</td></tr>";

                          foreach(
                  $value AS  $val){
                      echo
                  "
                       <tr><td class='evname' colspan='3'>
                  $val[d_event]</td></tr>
                      <tr><td class='evintro-daad' colspan='3' valign='top'>
                  $val[d_desc]</td></tr>
                      
                      "
                  ;                
                  }

                  Kommentar


                  • #24
                    Ach na eben *kopfklatsch*

                    PHP-Code:
                        while($event=mysql_fetch_array($result)){
                            
                    $start $event["start"];
                            while (
                    $start <= $event["ende"]) {
                                
                    $ev[$start++][]=$event;
                            }
                        } 
                    [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


                    • #25
                      ja das ist es.
                      vielen dank. ich habe ne menge gelernt und hätte das alleine nie hinbekommen.
                      Danke nochmal

                      Kommentar


                      • #26
                        Hallo Amica, wie schaffe ich es die veranstaltungen nicht nur nach monaten sondern nach datum zu ordnen, im moment habe ich veranstaltungen von januar 2010 und 2011 untereinander
                        ich habe probiert die while-schleife direkt auf mein datum-feld in der datenbank umzustellen
                        PHP-Code:
                        while($event=mysql_fetch_array($result)){
                                
                        $start $event["sd"];
                                while (
                        $start <= $event["ed"]) {
                                    
                        $ev[$sd++][]=$event;
                                }
                            } 
                        ich bekomme aber folgende fehlermeldung

                        Fatal error
                        : Allowed memory size of 33554432 bytes exhausted
                        (tried to allocate 16 bytes)

                        Kommentar


                        • #27
                          Nicht $sd++ sondern immer noch $start++

                          Alles weitere musst du genauer erläutern, aber rein aus der Vermutung heraus, suchst du sowas wie
                          Code:
                          EXTRACT(YEAR_MONTH FROM `start`)
                          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


                          • #28
                            Ich babe in der Datenbank das Feld sd (startdatum) und im Query hole ich es
                            als sd und auch als MONTH(sd) AS start.
                            Jetzt will ich aber den Array nicht nach start sondern nach sd sortieren, damit auch die Jahre berücksichtigt werden
                            PHP-Code:
                            while($event=mysql_fetch_array($result)){
                                    
                            $start $event["sd"];
                                    while (
                            $start <= $event["ed"]) {
                                        
                            $ev[$start++][]=$event;
                                    }
                                } 
                            bekomme den gleichen fehler
                            Fatal error: Allowed memory size of 33554432 bytes exhausted
                            (tried to allocate 35 bytes)

                            Kommentar


                            • #29
                              Der Fehler deutet jedenfalls darauf hin, dass $start nie größer wird als $event["ed"], weswegen die while-Schleife nie verlassen wird. Dass dann irgendwann mal der Speicher voll ist, ist nur logisch. Jetzt gilt es für dich, herauszufinden, was am Anfang in $start drin steht und was in $event["ed"]. Dann erkennst du sicher schon, warum die Schleifenbedingung immer erfüllt wird. Ich vermute mal einfach, dass die Spalte ed nicht genau so aufgebaut ist wie sd. Insofern wäre auch dein aktuelles SQL-Statement mal wieder interessant.
                              [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


                              • #30
                                Das sehe ich mir erst an, wenn es sinnvoll umgebrochen ist.

                                Hinweis: bezog sich auf einen gelöschten Beitrag
                                Zuletzt geändert von AmicaNoctis; 12.04.2010, 18:28.
                                [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