在尝试为存在关系的数组中的数值分配排名时,我很难知道从哪里开始。因此,例如,我需要像下面这样转换一个数组:
myarray = (4,76,34,13,34)
进入另一个数组,如:
myarray2 = (1,5,3.5,2,3.5)
基本上,当相同的数字在数组中出现不止一次时,分配给这些数字的排名是排名的平均值。因此,这两个 34 并没有排在第 3 位和第 4 位,而是都被指定为 3.5。同样,如果 34 有 3 个副本,则分配的 3 个等级将除以 3。任何帮助将不胜感激!
非常感谢,
亚当
最佳答案
我玩得很开心!
function rank($input)
{
$output = array();
$ranking = $input; sort($ranking); $ranking = array_flip($ranking);
$last_val = -1;
foreach($ranking as $key => $val){
$repetitions = ($val-$last_val-1);
$last_val = $val;
if($repetitions) {
$ranking[$key] = (($val*($repetitions+1))-($repetitions+1)*(($repetitions)/2))/($repetitions+1)+1 ;
} else {
$ranking[$key] = $val+1;
}
}
foreach($input as $key => $val){
$output[$key] = $ranking[$val];
}
return $output;
}
像这样使用它:
$a = array(4,76,34,13,34);
$c = rank($a);
print_r($c);
将输出:
Array
(
[0] => 1
[1] => 5
[2] => 3.5
[3] => 2
[4] => 3.5
)
这与:
Array(1, 5, 3.5, 2, 3.5)
正如预期的那样!
关于php - 存在关系时如何将排名编号分配给数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463732/