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

posted @ 2019-01-05 15:00  sfornt  阅读(317)  评论(0编辑  收藏  举报