<?php $total=20;//红包总金额 $num=10;// 分成10个红包,支持10人随机领取 $min=0.01;//每个人最少能收到0.01元 $redpack = new redpack($total,$num,$min); $jieguo = $redpack->getPack(); foreach($jieguo as $key=>$val){ $n = $key+1; echo '第'.$n.'个红包:'.$val['money'].' 元,余额:'.$val['balance'].' 元<br>'; } class redpack{ //总金额 private $total=0; //红包数量 private $num=0; //最小红包金额 private $min=0.01; public function __construct($total,$num,$min) { $this->total = $total; $this->num = $num; $this->min = $min; } //红包结果 public function getPack() { $total = $this->total; $num = $this->num; $min = $this->min; for ($i=1;$i<$num;$i++) { $safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限 $money=mt_rand($min*100,$safe_total*100)/100; $total=$total-$money; //红包数据 $readPack[]= [ 'money'=>$money, 'balance'=>$total, ]; } //最后一个红包,不用随机 $readPack[] = [ 'money'=>$money, 'balance'=>0, ]; //返回结果 return $readPack; } }