百度echarts餅圖百分比的計算規則php實現---最大餘額法

最大餘額法

參考文章最大餘額法

php實現

/**
     * 最大餘額法
     * @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]));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章