PHP计算得分为相等的数组值

时间:2014-01-14 09:27:15

标签: php arrays

我有一个值数组,它们按相反顺序排列(从最高到最低值)。

我想为每个数组值奖励积分,使得最低值得到1分,第二低得2分,依此类推。如果两个或更多值相等,我总结所有值,就好像它们不相等一样,并将每个值作为求和值的平均值。

以下是一个例子:

Value | Points
 59   |   8
 56   |   7
 55=  |   5,5  (would get 6 if it's not a tie)    
 55=  |   5,5  (would get 5 if it's not a tie)
 54   |   4
 52   |   3
 46   |   2
 19   |   1

我如何在PHP中执行此操作?

由于

2 个答案:

答案 0 :(得分:0)

我不知道您希望如何存储数据或如何显示数据,但这里有一个您想要实现的示例:

    $arrayPoints = array();
    $array = array(59,56,55,55,55,55,54,52,52,46,19);       
    $numElems = count($array);

    $j = $numElems;     
    for ($i=0; $i<$numElems; $i++)
    {
        $arrayPoints[$array[$i]][] = $j;
        $j--;
    }

    $result = array();
    foreach ($arrayPoints as $pointsInfoKey => $pointsInfoVal)
    {
        $i=0;
        $totalPoints = 0;
        foreach ($pointsInfoVal as $val)
        {
            $totalPoints += $val;
            $i++;
        }
        if ($i!=0) $totalPoints = $totalPoints/$i;

        echo "Value: $pointsInfoKey - Points: $totalPoints \n";
    }

结果将是:

Value: 59 - Points: 11 
Value: 56 - Points: 10 
Value: 55 - Points: 7.5 
Value: 54 - Points: 5 
Value: 52 - Points: 3.5 
Value: 46 - Points: 2 
Value: 19 - Points: 1 

我希望它有所帮助!

答案 1 :(得分:0)

根据关系给出所有值的平均值。 假设55个有三个肠,而对它们有5,6,7个 那么你可以为每个55提供一个点(5 + 6 + 7)/ 3