Echart 最大余额法

最大余额法44

参考文章最大余额法

php实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* 最大余额法
* @param array $data
* @return array
*/

function MaxBalance($data)
{
$sum = array_sum($data);
$res = [];
foreach ($data as $key=>$item) {
$res[$key]['percent'] = ($item/$sum)*10000;
}
//取出小数点
$result = [];
foreach ($res as $key=>$value) {
// $tmp = explode('.', $value['percent']);
$result[$value['percent']]['percent'] = $value['percent'];
$tmp = explode('.', $value['percent']);
$result[$value['percent']]['point'] = $tmp[1];
$result[$value['percent']]['int'] = $tmp[0];
}
//小数点排序
$sort = array_column($result, 'point');
array_multisort($sort, SORT_DESC, $result);
$int = array_column($result,'int');
$intSum = array_sum($int);
$count = 10000 - $intSum;
//余额排序分配席位
foreach ($result as $key=>$value) {
if($key < $count){
$result[$key]['int'] = ($result[$key]['int'] + 1)/100;
} else {
$result[$key]['int'] = $result[$key]['int']/100;
}

}
}
var_dump(MaxBalance([2,3,4]));