php计算排名,成绩相同需要并列算法
思路:
1、先用usort ,把需要排列的数组按照顺序排好
2、开始计算排名,如果并列名次一致,那么排名也应该和上次一样,
/* 原始数组$retData = {"nocId": "5","gold": "46","silver": "37","bronze": "38","total": "121","nocName": "美国","nocShortName": "USA","nocLogo": "https://sports3.gtimg.com/kokyooly/noc/5.png","nocUrl": "","nocRank": "1","nocGoldRank": "1","nocSilverRank": "1","nocBronzeRank": "1"},{"nocId": "26","gold": "29","silver": "18","bronze": "26","total": "73","nocName": "中国","nocShortName": "CHN","nocLogo": "https://sports3.gtimg.com/kokyooly/noc/26.png","nocUrl": "","nocRank": "2","nocGoldRank": "2","nocSilverRank": "3","nocBronzeRank": "2"},{"nocId": "211","gold": "27","silver": "23","bronze": "17","total": "67","nocName": "英国","nocShortName": "GBR","nocLogo": "https://sports3.gtimg.com/kokyooly/noc/211.png","nocUrl": "","nocRank": "3","nocGoldRank": "3","nocSilverRank": "2","nocBronzeRank": "5"}*/1、//先用usort ,把需要排列的数组按照顺序排好usort($retData ,'cmpTotalDesc');function cmpTotalDesc($a,$b){if($a['total'] != $b['total']) {return $a['total']>$b['total'] ? -1:1;} elseif($a['gold'] != $b['gold']) {return $a['gold']>$b['gold'] ? -1:1;} elseif($a['silver'] != $b['silver']) {return $a['silver']>$b['silver'] ? -1:1;} elseif($a['bronze'] != $b['bronze']) {return $a['bronze']>$b['bronze'] ? -1:1;}else{return $a['nocShortName']>$b['nocShortName'] ? 1:-1;}}// 2、开始计算排名,如果并列名次一致$this->getRank($retData,'total','nocRank');/*** 计算排名:* * @param $rank 已排好的顺序* @param $key 按哪个值排序* @param $rankKey 排好的名次赋值的key*/function getRank(&$retData,$key,$rankKey){$temp=""; //临时变量 ,记录每次需要比较大小的数值,$num=0; //自然排序变量,原始的不计并列排名的值$finalNum=0; //最终排名变量 ,最终输出的排名$tempNum=0; ///记录相等排名的增量,temp等于上次的值,则这个变量加一,用于记录有几个变量并列foreach ($retData as &$value){if($temp==$value[$key]){$tempNum++;$finalNum =$num;}else{$temp= $value[$key];$num++;$finalNum=$num+$tempNum; //最终排名为自然排名加上之前的相等记录增量$num=$finalNum; //将自然排名设置为最终排名的数上$tempNum=0;}
// var_dump("temp".$temp);
// var_dump("num".$num);
// var_dump("finalNum".$finalNum);
// var_dump("tempNum".$tempNum);
// var_dump($rankKey);$value[$rankKey]= strval($finalNum);}}
php计算排名,成绩相同需要并列算法相关推荐
- mysql 计算排名,生成排行榜
mysql计算排名,获取行号rowno 学生成绩表数据 SELECT * FROM table_score ORDER BY score DESC; 获取某个学生成绩排名并计算该学生和上一名学生成绩差 ...
- 汇编语言程序设计,计算比赛成绩
一.设计内容与设计要求 1.课程设计目的: <汇编语言程序设计>是计算机专业的重要的专业基础课,通过本课程设计使学生进一步巩固课堂所学,全面熟悉.掌握8088宏汇编语言程序设计的基本方法和 ...
- excel排名_表格技巧—如何在Excel中快速计算排名
在利用excel统计成绩的时候,往往会使用它的排名,如果一个一个排会造成工作效率非常低,那么如何快速排名呢?今天我们和大家分享的就是如何在excel中快速计算排名. 首先打开一张我们需要排名的exce ...
- 标准差 php,PHP基于方差和标准差计算学生成绩的稳定性示例
本文实例讲述了PHP基于方差和标准差计算学生成绩的稳定性.分享给大家供大家参考,具体如下: 项目中的学生端有处个人成长档案模块,要求依据学生近期十次考试成绩通过波动采集分析学生的成绩稳定性.学过数学都 ...
- 输入4个同学的姓名学号,语文数学英语信息计算平均成绩,按平均成绩高低排序输出java,c++实现
题目: /* 输入4个同学的姓名学号,语文数学英语信息计算平均成绩,按平均成绩高低排序输出 */ 代码部分: C++实现 #include<iostream> using names ...
- SQL-23 对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列...
这题需要注意 题目描述 对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列 CREATE TABLE ...
- 1.6 Java项目实战:计算平均成绩
编写一个程序,根据用户输入的总人数和总成绩计算平均成绩.要求程序能够处理总人数或者总成绩不是数字时的情况. 使用多重 catch 语句时,Java 虚拟机会把实际拋出的异常对象依次和各个 catch ...
- 统计学习方法第十一章作业:随机条件场—概率计算问题、IIS/GD学习算法、维特比预测算法 代码实现
随机条件场-概率计算问题.IIS/GD学习算法.维特比预测算法 这一章的算法不是很好写,整整研究了好几天,代码还是有点小问题,仅供参考. 用的是书上定义的特征函数. import numpy as n ...
- php梯度区间计算,快速计算梯度的魔法--反向传播算法
2.1 计算梯度的数值方法 第一次实验我留的一个课后作业里问你是否能够想出一个求解梯度的办法,其实不难想到一种简单的办法就是使用"数值法"计算梯度. 办法很简单,就是对于损失函数中 ...
- python牛顿法计算平方根_常用的平方根算法详解与实现
本文从属于笔者的数据结构与算法系列文章. SquareRoot 平方根计算一直是计算系统的常用算法,本文列举出几张简单易懂的平方根算法讲解与实现.其中Java版本的代码参考这里 Reference B ...
最新文章
- 我是如何根据豆瓣api来理解Restful API设计的
- 【Python】Pandas中的宝藏函数-applymap
- 圆心角 圆弧上点坐标_数控加工中心CNC的G02/G03圆弧指令的I、J、与R的区别
- 5月份,我居然发了这么多文章?我果然无聊.
- wangEditor-3.1.1 自己扩展的, 扩展图片添加alt标签
- 新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目
- python __call__
- 数据分析,如何构建指标体系
- 【C++】max_element() 和 min_element()
- java获取mysql表的主键_用java如何获取oracle数据库表里面的主键序列
- 小甲鱼【C语言】《带你学C带你飞》笔记
- java转发_Java中Request请求转发详解
- Creator H5全平台游戏开发教程 PDF 下载(800+页)
- 73个必会的经济类热词
- 易语言解决adb端口占用_Android ADB 端口占用问题解决方案
- leetcode 5230 Check If It Is a Straight Line
- IOS AutoFill Extension 使用
- 在word中输入文字后面的文字会被删除?原来是这么回事!
- Openwrt-USB网络共享
- [创新实践] SLAM简介