在PHP中计算数组中的值的等级

时间:2014-07-15 10:43:03

标签: php

我有一个数组,即

Array
(
    [18] => 0.6667
    [228] => 0.3333
    [25] => 0.3333
    [568] => 0.3333
    [762] => 0
    [740] => 0
    [742] => 0
)

我想将它们排名为

Array
(
    [18] => 0.6667  //1
    [228] => 0.3333 //2
    [25] => 0.3333  //2
    [568] => 0.3333  //2
    [762] => 0       //3
    [740] => 0       //3
    [742] => 0       //3
)

我尝试使用以下代码:

arsort($rank);
foreach ($rank as $k => $v) {
        $i=1;
        foreach ($rank as $k1 => $v1) {
            if($v==$v1){
                $newrank[$k]=$i;
            }
            else{
                $i++;  
            }     
        }
    }

但它给了我结果

Array
(
    [18] => 0.6667  //1
    [228] => 0.3333 //2
    [25] => 0.3333  //2
    [568] => 0.3333  //2
    [762] => 0       //5
    [740] => 0       //5
    [742] => 0       //5
)

我无法纠正为什么等级从2增加到5。

请帮忙。

2 个答案:

答案 0 :(得分:2)

您不需要嵌套循环。只需遍历数组,并在分数发生变化时递增$i

$newrank = array();
$i = 0;
$last_v = null;
foreach ($rank as $k => $v) {
    if ($v != $last_v) {
        $i++;
        $last_v = $v;
    }
    $newrank[$k] = $i;
}

答案 1 :(得分:1)

它完成了..

foreach ($rank as $k => $v) {
        $i=1;
        foreach (array_unique($rank) as $k1 => $v1) {
            if($v==$v1){
                $newrank[$k]=$i;

            }
            else{

                $i++;  
            }     
        }
    }