do - 在 PHP 中循环


Do - While loops in PHP

我有一个在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 查询首先按类别排序