题目
有一堆数据, 各自有自己的权重, 按照高到低进行计分, 初始分值为1, 后一分值则+1, 以此类推; 如果有相同权重的元素, 则相同权重元素计分值+0.5, 如果没有相同的元素则为整数分值.
例如:
元素 | 权重 | 计分 |
---|---|---|
A | 10 | 1 |
B | 8 | 2.5 |
C | 8 | 2.5 |
D | 6 | 3 |
E | 5 | 4.5 |
F | 5 | 4.5 |
G | 5 | 4.5 |
解法
假设有一个权重数组如: $arr = ['A' => 10, 'B'=> 8,'C' => 8, 'D' => 6, 'E'=> 5,'F'=>5,'G' => 5];
, 权重由高到到低排序, 则只需要循环一次即可获得权重计分.
$arr = ['A' => 10, 'B'=> 8,'C' => 8, 'D' => 6, 'E'=> 5,'F'=>5,'G' => 5];
$score = 1;
$tmp = ''; // 名称
$w = 0; // 权重
$score_arr = []; // 计分值集
foreach ($arr as $k => $v){
if($v == $w){
$score_arr[$k] = $score_arr[$tmp]= $score - 1 + 0.5;
}else{
$score_arr[$k] = $score;
$score ++;
}
$tmp = $k;
$w = $v;
}
var_dump($score_arr);
结果输出, 符合预期:
array(7) {
["A"]=>
int(1)
["B"]=>
float(2.5)
["C"]=>
float(2.5)
["D"]=>
int(3)
["E"]=>
float(4.5)
["F"]=>
float(4.5)
["G"]=>
float(4.5)
}