Probleme mit einer verschachtelten Schleife

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

  • Probleme mit einer verschachtelten Schleife

    Hallo,

    ich lerne gerade PHP und bin bei den Schleifen.
    Ich versuche eine Tabelle wie einen Monatskalender zu erstellen aber verzweifel schon an dem richtigen Aufbau.
    Die Tabelle soll 7 Spalten in der Breite haben und alle Tage aufführen.
    Daran sitze ich jetzt schon fast 2 Std und habe es nicht geschafft.

    Vielleicht kann mir jemand erklären wie ich das machen muss.
    Mir ist es wichtig, dass ich den richtigen Aufbau verstehe. Darum wäre eine Erklärung schön

    Das ist mein Code

    HTML-Code:
          <table border="1">
            <tr>
                <td>Mo</td>
                <td>Di</td>
                <td>Mi</td>
                <td>Do</td>
                <td>Fr</td>
                <td>Sa</td>
                <td>So</td>
            </tr>
            <tr>
            <?php
             $tage_im_monat = date("t");
    
             for($i = 1; $i <= $tage_im_monat; $i++) {
                for($i2 = 1; $i2 <= 7; $i2++)
                    echo "<td>$i</td>";
            }
    
    
             ?>
    
             </tr>
    
          </table>
    Danke

  • #2
    Überlege doch mal, was du machst. Am besten mit Bleistift und Papier, und ohne Computer. Wie würdest du einen Kalender machen? Nach welchen Regeln würdest du da vorgehen?

    Kommentar


    • #3
      Jetzt habe ich eine Tabelle gezeichnet.

      https://www.directupload.net/file/d/...tgzkeu_jpg.htm

      Und den Code verändert. Aber das sieht immer noch nach allem möglichen aus aber nicht wie ein Monatskalender.


      So sieht er jetzt aus:



      HTML-Code:
            <table border="1">
              <tr>
                  <td>Mo</td>
                  <td>Di</td>
                  <td>Mi</td>
                  <td>Do</td>
                  <td>Fr</td>
                  <td>Sa</td>
                  <td>So</td>
              </tr>
              <tr>
              <?php
               $tage_im_monat = date("t");
      
               for($i = 1; $i <= 7; $i++) {
      
                      for($i2 = 1; $i2 <= $tage_im_monat; $i2++) {
                          echo "<td>$i2</td>";
                      }
      
              }
      
      
               ?>
      
               </tr>
      
             </table>
      Danke für jede Hilfe

      Kommentar


      • #4
        Bist du dir sicher, dass der erste Tag im Monat immer ein Montag ist? Schau dir mal einen richtigen Kalender an.

        Kommentar


        • #5
          Na ja, ich arbeite die Probleme der Reihe nach ab. Als erstes versuche ich das Ganze so zu gestalten, dass es wie ein Mopnatskalender aussieht

          Und nach einem Monatskalender sieht es überhaupt nicht aus.

          Kommentar


          • #6
            Weil du zwei verschachtelte Schleifen hast. Das macht keinen Sinn. Bei jedem Durchgang, den die erste Schleife macht, wird die zweite Schleife vollständig durchlaufen.

            Du brauchst nur eine Schleife, die vom ersten Tag zum letzten Tag des Monats geht.

            Kommentar


            • #7
              Ich habe in meiner Grabbelkiste gestöbert und einen uralten Code von Anfang 2002 gefunden, den ich nur programmiert habe, um mich mit ein paar Datumsfunktionen vertraut zu machen. Der erzeugt jahreweise einen Kalender nach Wochen sortiert und markiert alle Sonn- und Feiertage rot. Vielleicht hilft dir das weiter. ABER WARNUNG!!! Das ist uralt und nicht besonders fein, aber es funktioniert. Vielleicht hilft es dir weiter:
              PHP-Code:
              <?php
                    
                  $trans
              [1] = 'Januar';
                  
              $trans[2] = 'Februar';
                  
              $trans[3] = 'März';
                  
              $trans[4] = 'April';
                  
              $trans[5] = 'Mai';
                  
              $trans[6] = 'Juni';
                  
              $trans[7] = 'Juli';
                  
              $trans[8] = 'August';
                  
              $trans[9] = 'September';
                  
              $trans[10] = 'Oktober';
                  
              $trans[11] = 'November';
                  
              $trans[12] = 'Dezember';
                  
              $html ''
                  for (
              $jahr 2021$jahr 2023$jahr ++) {
                      
              $feiertage = array (
                                             array(
              1,1),
                                             array ((
              date ("d"easter_date($jahr)) - 2), date ("m"easter_date($jahr))),
                                             array ((
              date ("d"easter_date($jahr)) + 1), date ("m"easter_date($jahr))),
                                             array (
              date ("d"easter_date($jahr) + (60 60 24 39)),date ("m"easter_date($jahr) + (60 60 24 39))),
                                             array (
              date ("d"easter_date($jahr) + (60 60 24 50)),date ("m"easter_date($jahr) + (60 60 24 50))),
                                             array (
              date ("d"easter_date($jahr) + (60 60 24 60)),date ("m"easter_date($jahr) + (60 60 24 60))),
                                             array (
              1,5),
                                             array (
              310),
                                             array (
              111),
                                             array (
              2512),
                                             array (
              2612),
                                             array (
              3112)
                                        );

                     
              $html .= '<br><table border="0" width="860" align="center">'."\n";

                     
              $line '"'.'Monat'.'"'.';"Mo";"Di";"Mi";"Do";"Fr";"Sa";"So"'."\n";;

                     for (
              $monat $monat 13$monat++)
                     {
                         
              $timestamp mktime(000$monat1$jahr);

                         
              $tag 1;
                         
              $wochentag 1;

                         
              $monatsnamen $trans[$monat];

                         if ((
              $monat 1) % == 0$html .= '<tr>';
                         
              $html .= '<td valign="top">'."\n";
                         
              $html .= "\t".'<table align="center" cellpadding="0" cellspacing="0" width="200" border="1" frame="box" rules="all" bordercolor="#000">'."\n";
                         
              $html .= "\t\t".'<tr>'."\n";
                         
              $html .= "\t\t\t".'<td colspan="7" style="padding-left: 3px;">'.$monatsnamen.' '.$jahr.'</td>'."\n";
                         
              $html .= "\t\t".'</tr>'."\n";
                         
              $html .= "\t\t".'<tr>'."\n";
                         
              $html .= "\t\t\t".'<td valign="top" align="right" style="padding-right: 3px;">Mo</td>'."\n";
                         
              $html .= "\t\t\t".'<td valign="top" align="right" style="padding-right: 3px;">Di</td>'."\n";
                         
              $html .= "\t\t\t".'<td valign="top" align="right" style="padding-right: 3px;">Mi</td>'."\n";
                         
              $html .= "\t\t\t".'<td valign="top" align="right" style="padding-right: 3px;">Do</td>'."\n";
                         
              $html .= "\t\t\t".'<td valign="top" align="right" style="padding-right: 3px;">Fr</td>'."\n";
                         
              $html .= "\t\t\t".'<td valign="top" align="right" style="padding-right: 3px;">Sa</td>'."\n";
                         
              $html .= "\t\t\t".'<td valign="top" align="right" style="padding-right: 3px;">So</td>'."\n";
                         
              $html .= "\t\t".'<tr>'."\n";

                         
              $line .= '"'.$monatsnamen.'"'.';"Mo";"Di";"Mi";"Do";"Fr";"Sa";"So"'."\n";;
                         
              $line .= '"'.$monatsnamen.'"';
                         
              $anfang date('w',$timestamp);

                         if (
              $anfang == 0$anfang 7;

                         for (
              $i=0$i $anfang 1$i++)
                         {
                             
              $html .= "\t\t\t".'<td>&nbsp;</td>'."\n";
                             
              $wochentag++;
                             
              $line .= ';'.'""';
                         }

                         while (
              checkdate($monat$tag$jahr))
                         {
                             
              $html .= "\t\t\t".'<td valign="top" align="right" style="padding-right: 3px;">';
                             
              $line .= ';'.'"';
                             if (
              $wochentag == 0)
                             {
                                
              $html .= '<b style="color: #f00;">';
                                
              $line .= '<B>';
                             }
                             else
                             {
                                for (
              $i 0$i sizeof ($feiertage);$i++)
                                {
                                    if (
              $tag == $feiertage[$i][0] && $monat == $feiertage[$i][1])
                                    {
                                       
              $html .= '<b style="color: #f00;">';
                                       
              $line .= '<B>';
                                    }
                                }
                             }
                             
              $line .= $tag;
                             
              $html .= $tag;
                             if (
              $wochentag == 0)
                             {
                                
              $html .= '</b>';
                             }
                             else
                             {
                                for (
              $i 0$i sizeof ($feiertage);$i++)
                                {
                                    if (
              $tag == $feiertage[$i][0] && $monat == $feiertage[$i][1])
                                    {
                                       
              $html .= '<b style="color: #f00;">';
                                    }
                                }
                             }
                             
              $html .= '</td>'."\n";
                             
              $line .= '"';
                             if (
              $wochentag == 0)
                             {
                                
              $html .= "\t\t".'</tr>'."\n";
                                
              $html .= "\t\t".'<tr>'."\n";
                                if  (
              $wochentag 32$line .= "\n".'"'.$monatsnamen.'"';
                             }
                             
              $tag++;
                             
              $timestamp $timestamp 1;
                             
              $wochentag++;
                         }

                         
              $line .= "\n";
                         
              $html .= "\t\t".'</tr>'."\n";
                         
              $html .= "\t".'</table>';
                         
                         
              $html .= '<td>'."\n";
                         if (
              $monat == 0$html .= '</tr>'."\n";
                     }
                     
              $html .= '</table>';       
              }
              echo 
              $html;
              ?>
              Gruß
              Peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Vielen Dank. Dann werde ich später mal weiter probieren.

                Kommentar

                Lädt...
                X