我有一个数组,即
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。
请帮忙。
答案 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++;
}
}
}