关于权重计分的问题


题目

有一堆数据, 各自有自己的权重, 按照高到低进行计分, 初始分值为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)
}

Author: Itaken
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Itaken !
  TOC目录