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

PHP如何用foreach循环按团队分组将数据库数据展示为多个HTML表格

实现方案

核心逻辑

不要直接遍历平级的原始数据集,提前做一次分组+排序预处理,后续的输出循环会非常简洁,可维护性也更高:

  1. 从数据库拿到所有记录后,先以team_id为键做数据分组
  2. 每个团队的记录按question_id升序排序
  3. 双层foreach遍历输出:外层遍历所有团队,内层遍历当前团队的问答内容

PHP 代码示例

假设从数据库查询到的原始数据是数组$rawRecords:

数据预处理

$grouped = [];
foreach ($rawRecords as $item) {
    $grouped[$item['team_id']][] = $item;
}
// 每个分组内按问题ID排序
foreach ($grouped as &$teamItems) {
    usort($teamItems, fn($a, $b) => $a['question_id'] <=> $b['question_id']);
}
unset($teamItems);

输出逻辑

$teamCount = count($grouped);
$currentIndex = 0;
foreach ($grouped as $teamId => $items) {
    echo "Team {$teamId}\n";
    foreach ($items as $qa) {
        echo "{$qa['question_id']} - {$qa['answer']}\n";
    }
    // 非最后一个团队输出空行分隔
    if (++$currentIndex !== $teamCount) {
        echo "\n";
    }
}

Python 代码示例

假设原始数据是字典列表raw_records:

数据预处理

from collections import defaultdict

grouped = defaultdict(list)
for item in raw_records:
    grouped[item['team_id']].append(item)
# 按团队ID排序,每个团队内按问题ID排序
sorted_teams = sorted(grouped.items(), key=lambda x: x[0])
for _, items in sorted_teams:
    items.sort(key=lambda x: x['question_id'])

输出逻辑

for idx, (team_id, items) in enumerate(sorted_teams):
    print(f"Team {team_id}")
    for qa in items:
        print(f"{qa['question_id']} - {qa['answer']}")
    # 非最后一个团队输出空行
    if idx != len(sorted_teams) - 1:
        print()

所有编程语言的实现逻辑完全通用,提前分组的写法比遍历原始数据时实时判断团队ID是否变化的写法更易读,也不会出现边界处理的bug。

内容的提问来源于stack exchange,提问作者Richard Coopmans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:06:05