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

如何将输出数组按分组排序?附当前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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:36:38