用PHP如何实现分数排名,有什么好的思路?

发布于 2022-09-04 19:20:26 字数 125 浏览 9 评论 0

对学生成绩做一个排名,分数为一个数组,排好名次后输出排名结果:
比如 $scores = array(90,100,100); 自定义函数实现返回数组 $rank(3,1,1);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

夏末 2022-09-11 19:20:26

<?php

$arr = [99,100,100];
$arr1=$arr;
rsort($arr1);
$c=[];
 foreach ( $arr as $v){
     $b= array_search($v, $arr1);
     $c[]=$b+1;
 }
 print_r($c);

?>

这个能满足你的需求,但是我有一个问题, 两个并列第一,考99那位不应该是第二名么

勿忘心安 2022-09-11 19:20:26

题主想要的是按原数组顺序显示的排名(可并列)。大体思路是将原数组补充上位置信息,然后按照排序的结果反向构建排名数组。写出来比较啰嗦:

get_ranks(a[1:n])
  s ← array(n)
  ranks ← array(n)
  for i from 1 to n                 ▷ s[i] has record type
    s[i] ← {position: i, value: a[i], rank: 0}
  descending_sort(s by value)       ▷ sort by s[i].value
  s[1].rank ← 1
  for i from 2 to n
    if s[i].value < s[i-1].value    ▷ dense rank
      s[i].rank ← s[i-1].rank + 1
    else
      s[i].rank ← s[i-1].rank
  for i from 1 to n                 ▷ construct result
    ranks[s[i].position] ← s[i].rank
  return ranks[]
  

注意如果有多个并列第n,下一个人将是第n+1名,这点与题主给出例子有点不同。整个算法的复杂度瓶颈还是排序,即O(n lgn)。

胡渣熟男 2022-09-11 19:20:26

用php本身的数组排序函数?

dawn曙光 2022-09-11 19:20:26

http://www.php.net/manual/zh/...
自带的数据排序 应该可以解决你的问题

狼亦尘 2022-09-11 19:20:26

先按分数给这个数组排序,然后将这个数组 revsert。然后按照分数取 key 就好了。

另外:你的分数不写在数据库里,这样拿出来本来就是有顺序的啊

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文