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

PHP排名功能错误:仅显示单个排名,寻求修复方案

修复PHP并列排名计算问题

原代码问题

原代码仅能输出单个排名,且未正确处理并列情况,核心问题有两个:

  1. $numbers 数组仅存入了单个平均分,无法处理多个数据的排名计算
  2. 排名递增逻辑错误,并列分数未保持同一排名,也未跳过被占用的名次

原代码:

$avr = intval($result->markk / 11); 
$numbers = array($avr);
rsort($numbers);

$arr = $arr1 = array();
$i = $rank = 1;

foreach ($numbers as $key => $value) {
    $arr[$value][] = $value;
}

foreach ($arr as $key => $value) {
    foreach ($value as $key1 => $value1) {
        echo $value1 . "- rank " . $rank . "<br>";
        $rank++; // Increment the rank
    }
    $i++;
}

修复后的代码

以下代码支持多数据的并列排名计算,比如输入分数数组[90, 85, 85, 80],会输出符合要求的并列排名:

// 收集所有用户的平均分到数组(替换成你的实际数据查询逻辑)
$numbers = [];
foreach ($results as $result) {
    $avr = intval($result->markk / 11);
    $numbers[] = $avr;
}

// 按分数降序排序
rsort($numbers);

$rank = 1;
$prevScore = null;

foreach ($numbers as $index => $score) {
    // 当前分数与上一个不同时,更新排名为当前索引+1
    if ($score !== $prevScore) {
        $rank = $index + 1;
        $prevScore = $score;
    }
    echo $score . "- rank " . $rank . "<br>";
}

关键逻辑说明

  • 先将所有用户的平均分存入$numbers数组,确保有足够数据进行排名计算
  • 用rsort()对分数降序排序,保证从高到低排列
  • 遍历过程中通过$prevScore记录上一个分数:
    • 遇到不同分数时,将排名设为当前索引+1(索引从0开始,直接对应实际名次)
    • 相同分数保持当前排名不变,自动实现并列效果
  • 该逻辑会自然跳过被并列占用的名次(比如两个第2名后,下一个直接是第4名)

示例输出

输入分数数组[90, 85, 85, 80],输出:

90- rank 1
85- rank 2
85- rank 2
80- rank 4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:53:25