php红包算法函数[优化]


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);
}
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值