0

我有以下 PHP 代码包含 2 个 foreachs

echo "<table class='table table-bordered'>";
foreach($resultOld as $key=>$value)
{
    foreach ($value as $key1 => $subjects) {
        $checked = $subjects;
        echo  "<tr><tr class=\"".$subjects."\">$key1
            <input type='checkbox' class=\"".$subjects."\"  value='checked' name=\"".$key1."JAN\" $checked/> </tr>               
           </tr>" ;
    }
}
echo "</table>";

$resultOld是一个fetchAll(PDO::FETCH_ASSOC)输出,它包含一个二维数组$subjects将从数据库中返回 661 个单词,这意味着该$resultOld数组有 661 个元素。在每 12 个单元格之后,我想开始一个新行(tr)。这意味着我需要表中的 55 行。如何使用 PHP 实现这一点?

4

2 回答 2

2

如果您希望每 12 条记录后有一个新行,则需要使用计数器并检查计数 -

$counter = 1;
echo "<table class='table table-bordered'>";
echo "<tr>"; //start the first row
foreach($resultOld as $key=>$value)
{
    foreach ($value as $key1 => $subjects) {

        // if the 13th cell, end last row, and start new row
        if ($counter%12==1){
                      echo "</tr><tr>";}
        $checked = $subjects;
        echo  "<td class=\"".$subjects."\">$key1
            <input type='checkbox' class=\"".$subjects."\"  value='checked' name=\"".$key1."JAN\" $checked/> </td>" ;

        // increase counter
        $counter++;
    }
}
echo "</tr>"; // end last row
echo "</table>";
于 2013-05-22T19:35:52.177 回答
1

首先,请注意您的 HTML 结构是错误的。我建议考虑这个是多一点的步骤。也许布局单行<table>HTML 结构以供在将其切片到 PHP 之间进行参考

这是一个例子:

<table class="...">
<tbody> <!-- I recommend using the tbody tag -->
    <tr>
        <td>...</td>
    </tr>
</tbody>
</table>

需要考虑三个基本问题:

  1. 表体
  2. 列(即单元格)

第一步是打印表体。你在这里做得很好:

echo '<table class="table table-bordered">';
echo '<tbody>';
//...
<echo '</tbody>';
echo '</table>';

第 2 步是遍历你的行

echo '<table class="table table-bordered">';
echo '<tbody>';

// Loop Through Rows
foreach($resultOld as $key=>$value)
{
    echo '<tr>'; // start a new row
    // ...
    echo '</tr>'; // end a row
}

<echo '</tbody>';
echo '</table>';

第 3 步是遍历表格的每一列或单元格:

// STEP 1
echo '<table class="table table-bordered">';
echo '<tbody>';

// STEP 2
// Loop Through Rows
foreach($resultOld as $key=>$value)
{
    echo '<tr>'; // start a new row

    // STEP 3
    foreach ($value as $key1 => $subjects) {
        $checked = $subjects;
        // Start a new column/cell
        echo '<td class="' . $subjects . '">';

        // Print cell contents
        echo $key1;
        echo '<input type="checkbox" class="' . $subjects . '" value="checked" name="' . $key1 . 'JAN" '. $checked . '/>';

        // End column/cell
        echo '</td>';
    } // END STEP 3

    echo '</tr>'; // end a row
} // END STEP 2

echo '</tbody>';
echo '</table>';
 // END STEP 1

关于您的代码的一些注释:

  • 您正在打印 2 个表格行,而不是打印一个表格行和一个表格列(即:<tr><tr>而不是<tr><td>;
  • 您需要打印第一个循环内的行,而不是第二个循环。
  • 第二个嵌套循环打印出您的第二个维度或列。

对我来说,我喜欢在打印 HTML 时使用单引号 (')。我这样做是因为我在 HTML 属性中使用了双引号 (")。这使我可以避免必须转义双引号字符并导致难以阅读的 '\""' 情况,这可能会导致简单的语法错误。

此外,当遇到打印 HTML 的问题时,将 HTML 分解为多个 echo/print 语句可以帮助您构建代码并解决问题。一旦它开始工作,您可以返回并将它们重构为单个 echo 语句,但是性能差异可能很小,以至于不值得花时间。

我希望这会有所帮助!

于 2013-05-22T19:28:22.393 回答