我有一个在PHP中可能非常简单的问题要解决,但我的大脑不会参与。
我有按类别划分的产品。我执行了一个成功的查询,它为我提供了一个数组,其中包含连接到其各自类别的产品。现在我想按类别显示它们,将每个类别拆分为自己的div
。我有以下代码:
$current_category = 0;
do
{
if($current_category != $row['category_id']){
echo '<div class="block">
<div class="menu">
<h4>'.$row['category_name'].'</h4>
<ul>';
do
{
echo '<li><a>'.$row['product_name'].'</a></li>';
}
while ($row['category_id'] == $current_category);
$current_category++;
//close list and divs
echo '</ul>
</div>
</div>';
}
}
while ($row = $stmt->fetch(PDO::FETCH_ASSOC));
但这只会输出每个类别中的第一个产品,而不是将它们全部输出然后继续下一个产品。我做错了什么?
您需要在内部循环中获取下一行,而不是在外部循环中获取:
do {
// no need to check we're in the right category - we always are
$current_category = $row['category_id'];
echo '<div class="block">
<div class="menu">
<h4>'.$row['category_name'].'</h4>
<ul>';
do {
echo '<li><a>'.$row['product_name'].'</a></li>';
// !!! get the next row here
$row = $stmt->fetch(PDO::FETCH_ASSOC);
}
while ($row['category_id'] == $current_category);
//close list and divs
echo '</ul>
</div>
</div>';
// !!! and don't get it again here
} while ($row);
您需要确保 SQL 查询首先按类别排序