/** * 随机红包函数 * @param $total 红包总金额 * @param $num 红包个数 * @return array */ public function packet($total, $num) { $min = 0.01; //红包最小值 $redPacket = []; //初始化红包数组 if ($total / $num == $min) { for ($i=1;$i<$num;$i++) { $redPacket[$i] = (string)$min; } $redPacket[$num] = (string)$min; }else { for ($i=1;$i<$num;$i++) { $safe_total = ($total-($num-$i)*$min)/($num-$i); //随机数安全上限 $money = @mt_rand($min*100,$safe_total*100)/100; //红包值 if ($money < $min) { $money = $min; } $total -= $money; $redPacket[$i] = sprintf('%.2f', $money); } $redPacket[$num] = sprintf('%.2f', $total); } shuffle($redPacket); // dump($redPacket); return $redPacket; }
网上的发红包方法有一个bug,当红包数目为10,金额0.1是会报错,所以改了一些东西