使用foreach()创建表

时间:2013-05-22 19:05:11

标签: php arrays multidimensional-array foreach

我有以下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>";

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

2 个答案:

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

答案 1 :(得分:1)

首先,请注意您的HTML结构是错误的。我建议考虑这是一个更多的步骤。也许布局单行<table> HTML结构,以便在将其切换为PHP

之间进行参考

以下是一个例子:

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

有三个基本要考虑的事项:

  1. 桌体
  2. The Row
  3. 列(即细胞)
  4. 步骤1是打印表体。你在这里做得很好:

    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语句,但性能差异可能很小,以至于不值得花时间。

    我希望有所帮助!