本文实例讲述了php实现excel中rank函数功能的方法。分享给大家供大家参考。具体分析如下:
10余年专注成都网站制作,成都企业网站定制,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于成都企业网站定制,高端网页制作,对生料搅拌车等多个方面,拥有丰富的网站维护经验。
sql语句实现排名是像这样的如:
总分成绩为
195,180,180,161,名次分别为1,2,3,4,遇到并列的情况也是按照顺序的,
而Excel函数rank排名得到的结果是1,2,2,4,遇到并列跳过中间的3
下面的函数模拟的就是这种情况
函数如下(不知道有没有更好的实现方法):
公式为:
名次=总人数--比自己小的数的个数-这个分数重复次数+1(加上自己)
得到名次的数组再根据对应的id写入到数据库,就实现rank的计算功能
(当然这个也可以改成这样195,180,180,165,名次是这样的1,2,2,3)
复制代码
代码如下://获得一组数的名次的数组
function
rank(array
$array){
foreach($array
as
$val){
$repeat=get_array_repeats($val,$array);
$num=gt_array_values($val,$array);
$rank[]=count($array)-$num-$repeat+1;
}
return
$rank;
}
//获得比自己数小的个数
function
gt_array_values($val,array
$array){
$num=0;
for($i=0;$icount($array);$i++){
if($val$array[$i]){
$num++;
}
}
return
$num;
}
//获得这个数的重复次数
function
get_array_repeats($string,array
$array)
{
$count
=
array_count_values($array);
foreach
($count
as
$key
=
$value)
{
if
($key
==
$string)
{
return
$value;
}
}
}
sort($arr);由小到大的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序
rsort($arr);由大到小的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序
先根据票数倒序查询票数表,sql语句大概是
"SELECT 学生id,票数 FROM 票数表 ORDER BY 票数 DESC";假设得到的结果集赋值为 $res,
再用PHP遍历,
$student = array();
foreach ($res as $key = $value) {
$student[$value['学生id']] = $key +1;
}
最后就可以得到student排名数组,键是学生的id,值就是学生的排名。