PHP循环输出数据时如何将相同Bundle Name的内容放在同一表格
PHP按Bundle Name字段分组生成独立表格实现方案
原有代码问题分析
- 核心逻辑错误:每次循环都将
$bundel赋值为当前行的BundelName,后续判断$row['BundelName'] != $bundel的条件永远不成立,无法触发表格拆分 - 缺少查询结果排序逻辑,若同个Bundle的行在数据库中不连续,会导致同个Bundle被拆分到多个表格
- 没有提前定义分组标识变量,初始状态下无判断依据
修改后可运行代码
<?php include('connection.php'); // 必须加ORDER BY保证同Bundle的行连续返回 $result1 = mysqli_query($conn, "SELECT * FROM bundel ORDER BY BundelName"); // 存储上一个分组的Bundle名,初始为空 $prevBundle = ''; while ($row = mysqli_fetch_assoc($result1)) { $currentBundle = $row['BundelName']; // 当前Bundle和上一个不同,说明开启新分组 if ($currentBundle != $prevBundle) { // 不是第一个分组的话,先关闭上一个表格 if ($prevBundle != '') { echo '</table><br><br>'; } // 输出新分组的表格,包含Bundle名标题 echo '<table border="1">'; echo '<caption><strong>'.$currentBundle.'</strong></caption>'; // 可选:输出表头 echo '<tr><th>SKU</th><th>Description</th></tr>'; // 更新分组标识 $prevBundle = $currentBundle; } // 输出当前行数据 echo '<tr>'; echo '<td>'.$row['SKU'].'</td>'; echo '<td>'.$row['Description'].'</td>'; echo '</tr>'; } // 循环结束关闭最后一个表格 echo '</table>'; ?>
实现逻辑说明
- 首先给SQL查询加上
ORDER BY BundelName,确保所有相同Bundle的行连续返回,这是分组渲染的基础前提 - 用
$prevBundle变量存储上一次循环的Bundle名称作为分组标识,初始值设为空 - 每次循环先判断当前行的Bundle是否和上一个分组标识不同:如果不同就关闭上一个表格,输出新表格的头部和Bundle名称
- 循环结束后单独关闭最后一个分组的表格,避免标签不闭合
内容的提问来源于stack exchange,提问作者nzxy12
相关产品推荐
相关产品推荐

