PHP奖池进行随机分配用户,设置最小单位
/**
* 奖池进行随机分配用户,设置最小单位
* @param $total_num 总奖池数
* @param $ids 用户ID 数组
* @param $multiple 最小单位
* @return array
*/
function random_split($total_num,$ids,$multiple){
$total_num = $total_num / $multiple;
$total_copies = count($ids);
$result = []; //结果
for($i=$total_copies;$i>0;$i--){
$ls_num=0;
$num = 0;
if($total_num > 0){
if($i==1){
$num += $total_num;
}else{
$max_num = floor($total_num/$i);
$ls_num = mt_rand(1,$max_num);
$num += $ls_num;
}
}
$result[] = ['user_id'=>$ids[$i-1],'divide_heat'=>$num*$multiple];
$total_num -= $ls_num;
}
shuffle($result); //打乱数组
return $result; //返回数组
}
//调用结果:
//总奖池数
$total_num = 150000;
//用户组
$ids = [11,15,20,119,50];
//最小单位1000
$multiple = 1000;
$resault = random_split($total_num,$ids,$multiple);
print_r($resault);
Array
(
[0] => Array
(
[user_id] => 119
[divide_heat] => 19000
)
[1] => Array
(
[user_id] => 15
[divide_heat] => 2000
)
[2] => Array
(
[user_id] => 11
[divide_heat] => 107000
)
[3] => Array
(
[user_id] => 50
[divide_heat] => 13000
)
[4] => Array
(
[user_id] => 20
[divide_heat] => 9000
)
)