You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现MySQL分类数据单while循环按4个Div分列展示

解决单个while循环分配35个分类到4个div的问题

我来帮你理顺这个需求!你的目标是用单个while循环把35个分类均匀分配到4个div中,原代码存在变量名冲突和逻辑漏洞,我给你调整后的完整实现:

核心思路

  1. 一次性获取所有分类数据(避免多次查询数据库,更高效)
  2. 计算每个div需要承载的分类数:ceil(35/4)=9,前3个div各放9个,最后一个放8个
  3. 在循环中跟踪当前处理的分类序号,到达分组上限时自动切换div(注意不要在最后一个分类后多余创建div)

修正后的完整代码

<?php
// 获取所有分类的结果集
$catResult = pullcategories();
$totalCats = mysqli_num_rows($catResult);
$perDivCount = ceil($totalCats / 4);
$currentCatNum = 0;

// 初始化第一个div和列表容器
echo '<div class="col3"><ul class="list-unstyled list-dashed">';

// 单个while循环处理所有分类
while ($category = mysqli_fetch_object($catResult)) {
    $currentCatNum++;
    
    // 输出分类项(注意转义防止XSS)
    echo '<li><a href="你的分类链接地址">' . htmlspecialchars($category->title) . '</a></li>';
    
    // 检查是否需要切换到下一个div(排除最后一个分类的情况)
    if ($currentCatNum % $perDivCount === 0 && $currentCatNum < $totalCats) {
        // 关闭当前的列表和div,开启新的容器
        echo '</ul></div><div class="col3"><ul class="list-unstyled list-dashed">';
    }
}

// 关闭最后一个列表和div
echo '</ul></div>';
?>

关键细节说明

  • 原代码中while ($topcats = mysqli_fetch_object($topcats))是严重错误:你把结果集变量$topcats用循环中的对象覆盖了,导致循环仅执行一次就会报错
  • 用htmlspecialchars()转义分类标题,避免XSS安全问题
  • 不需要多次调用pulltopcategories查询数据库,一次性获取所有数据后循环处理,性能更好

内容的提问来源于stack exchange,提问作者Drierer Kar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:38:45