一、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(整型);
<?php
$total_money=100;
$total_num=5;
$total_money=$total_money - $total_num;
for($i=$total_num;$i>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组
<?php
$div=3; //分成几组
$total=6; //总数
$a=range(0,$div-1);
$base=($total-array_sum($a))/$div;
for($len=count($a),$i=0; $i<$len; $i++){
$a[$i]+=$base;
}
shuffle($a); //打乱排序
var_dump($a);//$a中便是分的不等数
运行结果:
- array (size=3)
- 0 => int 2
- 1 => int 3
- 2 => int 1