$all=100; /*** *all 要分配的总数 *times 要分配的次数 *max 分配能够达到的最大值 *min 分配的最小值 * *先采用用户的分配‘最大值’,如果这个分配值大于当前剩余的总数,那这个最大值也就没有意义,就直接用当前剩余的最大值作为参考 */ function distribution($all,$times="",$max="",$min=0){ if($times=="")return 0; if($max==""){$max=$all;} $num=(int)$times; for($i=0;$i<$num;$i++){ if($max>$all){$max=$all;} $tmp=mt_rand($min,$max); $result[]=$tmp; $all-=$tmp; echo $tmp."<br>"; } return $result; } $res=distribution($all,20,5,0); echo array_sum($res);