一、100个数随机分成10份:
说明:
1、此算法$money_total值可大于 $personal_num 也可以小于$personal_num;
2、得出来的结果是保留两位小数点;
3、相加和等于100;可用于发红包,精准到小数;
4、值类型结果是string(字符串);
$money_total=100;
$personal_num=10;
$min_money=0.01;
$money_right=$money_total;
$randMoney=[];
for($i=1;$i<=$personal_num;$i++){
if($i== $personal_num){
$money=$money_right;
}else{
$max=$money_right*100 - ($personal_num - $i ) * $min_money *100;
$money= rand($min_money*100,$max) /100;
$money=sprintf("%.2f",$money);
}
$randMoney[]=$money;
$money_right=$money_right - $money;
$money_right=sprintf("%.2f",$money_right);
}
shuffle($randMoney);
var_dump($randMoney);
运行结果:
array (size=10)
0 => string '54.91' (length=5)
1 => string '3.02' (length=4)
2 => string '4.59' (length=4)
3 => string '12.76' (length=5)
4 => string '0.02' (length=4)
5 => string '22.83' (length=5)
6 => string '0.01' (length=4)
7 => string '0.01' (length=4)
8 => string '0.01' (length=4)
9 => string '1.84' (length=4)
二、100随机分成5份:
说明:
1、此算法$total_money值必须大于$total_num;
2、得出来的结果是整数;
3、相加和等于100;
4、值类型结果是int(整型);
0;$i--){
$data[$i]=1;
$ls_money=0;
if($total_money>0){
if($i==1){
$data[$i] +=$total_money;
}else{
$max_money=floor($total_money/$i);
$ls_money=mt_rand(0,$max_money);
$data[$i]+=$ls_money;
}
}
$total_money -= $ls_money;
}
var_dump($data);
运算结果:
array (size=5)
5 => int 5
4 => int 17
3 => int 23
2 => int 9
1 => int 46
三、6人随机分成3组
运行结果:
array (size=3)
0 => int 2
1 => int 3
2 => int 1