php – 如何使用重复值对数组值进行排名,如果存在平局则跳过某些位置?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何使用重复值对数组值进行排名,如果存在平局则跳过某些位置?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1870字,纯文字阅读大概需要3分钟。
内容图文
![php – 如何使用重复值对数组值进行排名,如果存在平局则跳过某些位置?](/upload/InfoBanner/zyjiaocheng/826/b7ec504c606a4506b135309dc921de3f.jpg)
我正在研究一个操纵大学生考试成绩的数据库.基本上,我从一个MySq数据库中提取记录,在任何给定时间播放一个类.我想对学生排名,排名第一的是最高的学生.
这是一个例子;
Marks: 37, 92, 84, 83, 84, 65, 41, 38, 38, 84.
所以我想将mysql数据捕获为单个数组.一旦我有一个数组中的数据,我应该为每个学生分配一个位置,如1/10(数字1,92分),4/10等.现在的问题是,如果有一个平局,然后下一个分数跳过一个位置,如果在一个位置有3个分数,则下一个分数跳过2个位置.所以上面的分数排名如下;
92 - 1
84 - 2,
84 - 2,
84 - 2,
83 - 5,
65 - 6,
41 - 7,
38 - 8,
38 - 8 ,
37 - 10
评分系统要求保持位置数量(排名,如果你愿意),所以我们最终在这个级别中有10个职位,因为职位3,4,5和9没有任何占用者. (填写每个数字的替代方案将只给我们8个职位!)
是否有可能(人类可能/ php可能)使用PHP对上面的分数进行排名,以便能够处理可能的关系,例如在一个位置获得4分?很可能,我无法想出这样做的功能.我需要一个PHP函数(或者什么…… PHP),它将获取一个数组并产生如上所述的排名.
任何帮助都将深表感谢,但我想我可能会要求太多.如果可以使用MySQL查询数据执行此操作而不将其放入数组中,那么这也会有所帮助!
解决方法:
我假设成绩已经按数据库排序,否则使用sort($grades);.
码:
$grades = array(92, 84, 84, 84, 83, 65, 41, 38, 38, 37);
$occurrences = array_count_values($grades);
$grades = array_unique($grades);
foreach($grades as $grade) {
echo str_repeat($grade .' - '.($i+1).'<br>',$occurrences[$grade]);
$i += $occurrences[$grade];
}
结果:
92 - 1
84 - 2
84 - 2
84 - 2
83 - 5
65 - 6
41 - 7
38 - 8
38 - 8
37 - 10
编辑(回应下面的讨论)
显然,如果领带发生在最低分,
所有最低分的等级应该等于分数总数.
码:
$grades = array(92, 84, 84, 84, 83, 65, 41, 38, 37, 37);
$occurrences = array_count_values($grades);
$grades = array_unique($grades);
foreach($grades as $grade) {
if($grade == end($grades))$i += $occurrences[$grade]-1;
echo str_repeat($grade .' - '.($i+1).'<br>',$occurrences[$grade]);
$i += $occurrences[$grade];
}
结果:
92 - 1
84 - 2
84 - 2
84 - 2
83 - 5
65 - 6
41 - 7
38 - 8
37 - 10
37 - 10
内容总结
以上是互联网集市为您收集整理的php – 如何使用重复值对数组值进行排名,如果存在平局则跳过某些位置?全部内容,希望文章能够帮你解决php – 如何使用重复值对数组值进行排名,如果存在平局则跳过某些位置?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。