当有联系时,我正在努力知道在尝试将排名分配给数组中的数值时,从哪里开始.因此,例如,我需要像下面这样转换数组:
myarray = (4,76,34,13,34)
Run Code Online (Sandbox Code Playgroud)
进入另一个数组,如:
myarray2 = (1,5,3.5,2,3.5)
Run Code Online (Sandbox Code Playgroud)
基本上,当相同的数字在数组中出现不止一次时,这些数字的指定等级是等级的平均值.因此,不是将两个34分别排在第3和第4,而是分配3.5.同样地,如果有34个副本,那么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;
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
$a = array(4,76,34,13,34);
$c = rank($a);
print_r($c);
Run Code Online (Sandbox Code Playgroud)
将输出:
Array
(
[0] => 1
[1] => 5
[2] => 3.5
[3] => 2
[4] => 3.5
)
Run Code Online (Sandbox Code Playgroud)
这与以下相同:
Array(1, 5, 3.5, 2, 3.5)
Run Code Online (Sandbox Code Playgroud)
正如预期的那样!
| 归档时间: |
|
| 查看次数: |
2198 次 |
| 最近记录: |