每第8个实例都转到新的tr

时间:2012-04-30 08:20:35

标签: php foreach html-table

我正在用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>

我想每8个号码开始一个新的<tr>,因为一周有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天。

2 个答案:

答案 0 :(得分: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++;
            }
        }
    }
?>

这是未经测试的代码,可能更简洁,但希望你能得到这个想法。

答案 1 :(得分: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>