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

PHP多维数组排序:学生成绩系统按平均分排序实现

按学生平均分排序多维数组的PHP方案

嘿,看来你正在搭建学生成绩系统,需要给这个多维数组按平均分排序对吧?在PHP里处理这种场景,用usort()配合自定义比较逻辑就非常方便,我给你几个实用的方案:

基础排序方案

1. 按平均分降序排序(从高到低)

这是最常用的成绩排序方式,直接用PHP的太空船运算符<=>就能简洁实现:

// 你的学生数据数组
$students = [
    ['student' => 'STD-000001', 'marks' => 78, 'total_subjects' => 1, 'avarage' => 78],
    ['student' => 'STD-000002', 'marks' => 60.4, 'total_subjects' => 1, 'avarage' => 60.4],
    ['student' => 'STD-000013', 'marks' => 0, 'total_subjects' => 0, 'avarage' => 0],
    // 其他学生数据...
];

// 按平均分降序排序
usort($students, function($a, $b) {
    // 注意你的键名是'avarage'(拼写小失误),如果后续修正为'average'记得同步修改这里
    return $b['avarage'] <=> $a['avarage'];
});

2. 按平均分升序排序(从低到高)

只需要调换比较参数的顺序即可:

usort($students, function($a, $b) {
    return $a['avarage'] <=> $b['avarage'];
});

特殊场景处理:将无考试记录的学生放到末尾

你的数组里有个total_subjects为0的学生,平均分是0,如果想把这类学生统一放到排序结果的最后(不管升序还是降序),可以调整比较逻辑:

usort($students, function($a, $b) {
    // 标记是否为无考试记录的学生
    $aHasNoExams = ($a['total_subjects'] == 0 && $a['avarage'] == 0);
    $bHasNoExams = ($b['total_subjects'] == 0 && $b['avarage'] == 0);
    
    if ($aHasNoExams && !$bHasNoExams) {
        return 1; // 让无考试记录的a排在后面
    } elseif (!$aHasNoExams && $bHasNoExams) {
        return -1; // 让无考试记录的b排在后面
    } else {
        // 正常按平均分降序排序,升序的话换成$a['avarage'] <=> $b['avarage']
        return $b['avarage'] <=> $a['avarage'];
    }
});

兼容旧PHP版本的方案

如果你的PHP版本低于7.0(不支持太空船运算符),可以用传统的比较方式:

usort($students, function($a, $b) {
    if ($a['avarage'] == $b['avarage']) {
        return 0;
    }
    // 降序排序:平均分高的在前,返回1/-1控制顺序
    return ($a['avarage'] < $b['avarage']) ? 1 : -1;
});

最后提醒下:你的数组里平均分的键名是avarage,正确拼写是average,如果后续修正键名的话,记得同步修改代码里对应的键名哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:37:42