PHP如何用foreach循环按团队分组将数据库数据展示为多个HTML表格
实现方案
核心逻辑
不要直接遍历平级的原始数据集,提前做一次分组+排序预处理,后续的输出循环会非常简洁,可维护性也更高:
- 从数据库拿到所有记录后,先以
team_id为键做数据分组 - 每个团队的记录按
question_id升序排序 - 双层
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
相关产品推荐
相关产品推荐

