我的子类别内容以某种方式脱离了div。第一个留在那里,但第二个,第三个等正在从中出来。
有什么解决方案吗?
<?php
...
$stmt = $dbh->query('SELECT parent.subcat_id, parent.subcat_name, child.subsubcat_name, child.subcat_id, child.cat_id FROM subcategories parent JOIN subsubcategories child ON child.cat_id = parent.cat_id');
$lastcat = 0;
$stmt->execute();
$row2 = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($row2 as $row) {
if($lastcat != $row['cat_id']){
$lastcat = $row['cat_id'];
echo '<div class="panel panel-default">
<div class="panel-heading">';
echo $row['subcat_name'];
echo '</div><div class="panel-body">';
}
echo $row['subsubcat_name'];
echo "</div></div>";
}
?>
这应该像这样重写:
$close_previous = false; // special flag
foreach ($row2 as $row) {
if ($lastcat != $row['cat_id']) {
$lastcat = $row['cat_id'];
// check whether you need to close divs from previous block
if ($close_previous) {
echo '</div>'; // close .panel-body
echo '</div>'; // close .panel-default
} else {
// for the first time you don't need
// to close divs, so here we skip it
$close_previous = true;
}
echo '<div class="panel panel-default"><div class="panel-heading">';
echo $row['subcat_name'];
echo '</div><div class="panel-body">';
}
echo $row['subsubcat_name'];
// add link
echo '<a href="/test.php?id=' . $row['subcategoryid'] . '">Click</a>';
}
// explicitly close last divs block
echo '</div>'; // close .panel-body
echo '</div>'; // close .panel-default
此外,检查生成的 html 标记以查看问题也是一种很好的做法。