1

PHPでカレンダーを作成しています。

コントローラーで、特定の月の日数を検出し、その範囲を配列に設定しました: daysInMonthArray.

ビューでは、foreachこの配列は各数値を次のように出力します<td>:

<tr>
    <?php 
    // output the number of days in the month
        foreach($this->daysInMonthArray as $days1){
            foreach($days1 as $key => $object){
                echo "<td>"  . $object . "</td>"; 
            }
        } ?>
</tr>

<tr>1週間は 7 日で、新しい週を開始するには新しい行を開始する必要があるため、8 番目ごとに新しい番号を開始したいと考えています。

出力の残りを 8 で割った場合に検出する if ステートメントを囲んでみました。出力が 0 の場合は改行、そうでない場合は続行します。ただし、<tr>タグがphpステートメントの外側にあるため、これは機能しませんでした。

回答とコメントに従って、コードを次のように更新しました。

<tr>
        <?php 
        // output the number of days in the month

        foreach($this->daysInMonthArray as $days1){
            foreach($days1 as $key => $object){
                if($object % 8 == 0){
                    echo "</tr><tr><td>" . $object . "</td>";
                }else {
                echo "<td>"  . $object . "</td>"; 
                }
            }
        } ?>
        </tr>

これは、月の中間の 2 週間を除いて、ほとんど機能します。中間の 2 週間は 8 日ですが、最初と最後の週は 7 日です。

4

2 に答える 2

1

あなたはこれに次のように答えました:

タグがphpステートメントの外にあるため、これは機能しませんでした

<tr>ループ内でタグを取得する必要があります。

<?php
    $daysInRow = 0;
    // output the number of days in the month
    foreach($this->daysInMonthArray as $days1)
    {
        foreach($days1 as $key => $object)
        {
            if($daysInRow % 7 === 0)
            {
                echo '<tr>';
            }

            echo "<td>"  . $object . "</td>"; 

            if($daysInRow % 7 === 0)
            {
                echo '</tr>';
            }

            if($daysInRow % 7 === 0)
            {
                $daysInRow = 0;
            }
            else
            {
                $daysInRow++;
            }
        }
    }
?>

これはテストされていないコードであり、より簡潔になる可能性がありますが、アイデアが得られることを願っています.

于 2012-04-30T08:32:15.813 に答える
0

遭遇する問題の 1 つは、テーブルを既存のテーブルにネストしているということです。試す:

<tr><td>
    <?php
      // output the number of days in the month
      foreach($this->daysInMonthArray as $days1){
        echo "<table>";

        $dayofweek = 0;
        foreach($days1 as $key => $object){
          if($dayofweek%7 == 0)
            echo "<tr>";

          echo "<td>" . $object . "</td>";

          if($dayofweek%7 == 0)
            echo "</tr>";

          $dayofweek++;               
        }

        if($dayofweek%7 != 0) //last tr
          echo "</tr>";

        echo "</table>";
      }
    ?>
</td></tr>
于 2012-04-30T08:42:08.543 に答える