用PHP排名平均值

用PHP排名平均值,php,math,formula,ranking,Php,Math,Formula,Ranking,在Excel中有一个函数Rank Average() 我希望在PHP中也能做到这一点。在网上,我发现了很多排名解决方案,但没有多少解决方案考虑到重复,当他们这样做时,我得到的结果与Excel给我的结果完全不同。不过,这非常重要 理想情况下,我需要的是一个函数,它需要一个分数和数组来比较它,并给我它的排名 Excel中某些实际日期的示例: $array = array(5.80,6.00,6.00,5.60,3.20,3.00,3.60,5.70,3.60,1.90,5.00,5.80,3.00,

在Excel中有一个函数Rank Average()

我希望在PHP中也能做到这一点。在网上,我发现了很多排名解决方案,但没有多少解决方案考虑到重复,当他们这样做时,我得到的结果与Excel给我的结果完全不同。不过,这非常重要

理想情况下,我需要的是一个函数,它需要一个分数和数组来比较它,并给我它的排名

Excel中某些实际日期的示例:

$array = array(5.80,6.00,6.00,5.60,3.20,3.00,3.60,5.70,3.60,1.90,5.00,5.80,3.00,3.80,5.00,3.00,6.00,5.70,5.00,4.90,4.20,3.60,5.00,4.90,4.90,3.00
3.30,4.80,4.60,4.10,4.70,6.00,3.30,4.30,4.30,3.00,3.10,6.00,1.90,3.80,5.00,2.00,2.80,3.00,4.20,3.00,5.50,6.00,5.00,5.00);

$score1 = 5.80;
$score2 = 6.00;

$rank1 = rankAvg($score1, $array); //should return 7.5
$rank2 = rankAvg($score2, $array); //should return 3.5

就在这里的这一个对我起了作用(),但我不得不改变一些事情

public function rankAvg($rangeArr)
{
    $count = 0;
    $unique = $rangeArr; arsort($unique);
    $unique = array_count_values($unique);

    foreach ($unique as $key => $frequency) {
        foreach (range(1, $frequency) as $i) {
            $unique[$key] += $count++;
        }

        $unique[$key] /= $frequency;
    }

    foreach ($rangeArr as $key => $value) {
        $data[$key] = $rangeArr[$key] . ': '. $unique[$value];
    }

    return $data;
}

它返回一个完整数组,而不是给定分数的值。但是也可以。

您自己尝试过什么吗?我尝试过,但也没有得到正确的结果。您应该发布您尝试过的代码。然后我们可以试着修复它。不要指望这里的人给你现成的解决方案。按请求顺序对数组排序,并对值进行索引。如果找不到,则返回NULLYes,但这并不能解决可能的重复问题这是完美的,也是我想要的。
public function rankAvg($rangeArr)
{
    $count = 0;
    $unique = $rangeArr; arsort($unique);
    $unique = array_count_values($unique);

    foreach ($unique as $key => $frequency) {
        foreach (range(1, $frequency) as $i) {
            $unique[$key] += $count++;
        }

        $unique[$key] /= $frequency;
    }

    foreach ($rangeArr as $key => $value) {
        $data[$key] = $rangeArr[$key] . ': '. $unique[$value];
    }

    return $data;
}