如何将输出数组按分组排序?附当前PHP代码
实现学生名单按姓名分组重复输出的PHP方案
你想要的效果是把学生名单按姓名分组,同姓名的连续出现对应次数对吧?结合你提供的代码片段,我给你整理了PHP里的实现步骤:
1. 先统计每个姓名的出现次数
首先,你需要从原始学生数据数组中提取所有姓名,并用array_count_values()统计每个姓名出现的次数。假设你的原始学生数据存在$students数组里:
// 提取所有学生姓名并统计次数 $nameOccurrences = array_count_values(array_column($students, 'student_name'));
2. 对统计结果排序
接下来可以按姓名升序排序(如果需要按出现次数排序,可以用arsort()/asort()):
// 按姓名字母顺序升序排序 ksort($nameOccurrences); // 若要按出现次数降序排序,替换为: // arsort($nameOccurrences);
3. 生成重复的表格行
现在遍历排序后的统计数组,每个姓名循环对应次数生成表格行,同时保留你原有的leave_sids判断逻辑:
$struck_off_list_bit = ''; $date = // 你的日期变量 $leave_sids = // 你的leave_sids数组 foreach ($nameOccurrences as $studentName => $count) { // 获取该学生的sid(假设同姓名的sid一致,若不一致需调整逻辑) $targetStudent = current(array_filter($students, function($item) use ($studentName) { return $item['student_name'] === $studentName; })); $sid = $targetStudent['sid']; if (!in_array($sid, $leave_sids)) { // 循环count次生成对应行 for ($i = 0; $i < $count; $i++) { $struck_off_list_bit .= '<tr> <td>' . $sid . '</td> <td><a href="school_id.php?action=preview_id_card&sid=' . $sid . '">' . $studentName . '</a></td> <td>' . $date . '</td> <td>' . $... . '</td> <!-- 补全你原有的其他列内容 --> </tr>'; } } }
额外提示
- 如果同一个姓名对应不同的
sid,你需要先按student_name+sid的组合分组,而不是仅按姓名统计。 - 如果你是从数据库获取数据,也可以直接在SQL查询中添加
ORDER BY student_name,这样查询结果本身就是同姓名连续的,再循环输出也能达到效果,这种方式更高效。
内容的提问来源于stack exchange,提问作者Uzma
相关产品推荐
相关产品推荐

