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>每隔 8 个号码开始一个新号码,因为一周有 7 天,需要开始新的一行才能开始新的一周。

我尝试封闭一个 if 语句,如果除以 8,则检测输出的剩余部分。如果输出为 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 周放置 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

您将遇到的一个问题是您将表格嵌套在现有表格中。尝试:

<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 回答