【问题标题】:Every 8th instance go to new tr每 8 个实例去新的 tr
【发布时间】:2017-10-04 01:03:25
【问题描述】:

我正在用 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 个数字开始一个新的&lt;tr&gt;,因为一周有 7 天,需要开始一个新行才能开始新的一周。

我尝试封闭一个 if 语句,如果除以 8 则检测输出的余数。如果输出为 0,则换行,如果不是,则继续。但是,这不起作用,因为&lt;tr&gt; 标记在 php 语句之外。

以下答案和 cmets 我已将代码更新为:

<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 天。

【问题讨论】:

  • 您写道“这不起作用,因为标签在 php 语句之外”。所以你发现了问题所在。那么将它们放入循环中怎么样?
  • 我会尝试一个递增变量,每 7 次迭代重置一次。此外,唯一应该保留在循环之外的标签是表格标签。

标签: php foreach html-table


【解决方案1】:

您自己已经回答了以下问题:

这不起作用,因为标签在 php 语句之外

您必须在循环中获取&lt;tr&gt; 标签。

<?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++;
            }
        }
    }
?>

这是未经测试的代码,可能更简洁,但希望你能明白。

【讨论】:

  • 不幸的是,这会将每个新数字输出到一个新的 tr。创建 30 行。查看相关更新。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2023-02-23
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2017-08-04
    相关资源
    最近更新 更多