php红包算法函数[优化]
<?php header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10000;//红包总额 $num=10;// 分成8个红包,支持8人随机领取 $min=10;//每个人最少能收到0.01元 echo '<pre>'; $redarr=array(); for ($i=1;$i<=$num;$i++) { $red=getredmoney($i,$total,$num,$min); $total=$total-$red['money']; echo '第'.$i.'个红包:'.$red['money'].' 元,余额:'.$red['total'].' 元 <br/>'; $redarr[]=$red['money']; } echo '总金额:'.array_sum($redarr); /** * 获取红包 * @param $i 第几个人 * @param $total 剩余总红包金额 * @param $num 总人数 * @param $min 最小获得金额 * @param $point 保留小数位数 */ function getredmoney($i,$total,$num=10,$min=1,$point=0){ if($i==$num){ $money=$total; }else{ $pre=$total/($num-$i+1); if($pre==$min){ $money=$min; }else if($pre<$min || ($pre-$min)<1){ $safe_total=$total-($num-$i)*$min;//随机安全上限 $money=@mt_rand($min*100,$safe_total*100)/100; }else{ $safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限 $money=@mt_rand($min*100,$safe_total*100)/100; if($money<$min)$money=$min; } $money=round($money,$point); } $total=$total-$money; return array('i'=>$i,'money'=>$money,'total'=>$total); } ?>
相关推荐
-
tp5依赖注入(自动实例化):解决了像类中的方法传对象的问题 php
2019-1-7
-
php检测数据规则 php
2019-1-7
-
转换秒钟为分钟 php
2019-1-8
-
获取小程序码 php
2019-1-7
-
php读取指定目录下的所有文件 php
2019-1-8
-
PHP常用函数封装 php
2019-1-8
-
phpRedis函数使用总结 php
2019-1-7
-
php 数组助手类 php
2019-1-7
-
8个新鲜的PHP常用代码 php
2019-1-8
-
php连mysql的工具类 php
2019-1-8