我有以下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实现这一目标?
答案 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是打印表体。你在这里做得很好:
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
关于您的代码的一些注意事项:
<tr><tr>
而不是<tr><td>
; 对我来说,我喜欢使用单引号(')来打印HTML。我这样做是因为我对HTML属性使用双引号(“)。这使我可以避免必须转义双引号字符并获得难以阅读的'\”“'情况,这可能会导致简单的语法错误。
当遇到打印HTML的问题时,将HTML制作成多个echo / print语句可以帮助您构建代码并解决问题。一旦它工作,你可以返回并将它们重构为一个echo语句,但性能差异可能很小,以至于不值得花时间。
我希望有所帮助!