指定金额随机生成N个红包

2019-07-01 14:47:31 浏览2213次 作者: 旋风

收藏

不建议红包发一个运算一次,因为前期抢到大红包的概率大,后期抢到大红包的概率小,建议第一次就算好红包分别是多少,然后抢一个分配一个红包。这样才是最公平的。

那么,具体做法如下几步:

第一:发完红包就把这个红包的总额计算红包个数,每个红包应该多少钱,存到表里,表里面有这几个列:本表id、红包表中的红包id,金额,状态(1未发放2已发放),抢到的用户id(默认为0)

第二:抢红包的时候,去上面说的那个表中,找一下抢到这个红包对应的生成的金额数据们,读取一个作为抢的这个人的红包金额,并把状态改为2,然后把抢到的用户id改为抢的这个人的红包id

第三:显示(只显示已经抢到的)出来并存到抢到那个人那里。(同理,最大红包就是那个红包生成的金额中最大的红包)

红包生成代码如下:

<?php

header('Content-type:text/html;charset=utf-8');

function randPacket($money,$nums){
        $arr = [];
        $hes = 0;
        $hess =0;
        for ($i=0;$i<$nums;$i++){
            $rand =rand(1,1000);
            $arr[]=$rand;
            $hes+=$rand;
        }
        $arr2 =[];
        foreach ($arr as $key=>$value){
            $round = round(($value/$hes)*$money,2);
            $arr2[] =$round;
            $hess+=$round;
        }
        if($money !=round($hess,2)){
            $hesss =round($money-$hess,2);
            $arr2[0]=$arr2[0]+$hesss;
        }
        return $arr2;
}

//1块钱发五个红包
$getdata = randPacket(1,5);
echo '最大红包:'.max($getdata);
echo '<br />';
print_r($getdata);exit;
?>

运行五次,结果如下:

第一次:

最大红包:0.35
Array ( [0] => 0.03 [1] => 0.02 [2] => 0.34 [3] => 0.26 [4] => 0.35 )


第二次:

最大红包:0.27
Array ( [0] => 0.27 [1] => 0.2 [2] => 0.16 [3] => 0.22 [4] => 0.15 )


第三次:

最大红包:0.29
Array ( [0] => 0.29 [1] => 0.23 [2] => 0.17 [3] => 0.06 [4] => 0.25 )


第四次:

最大红包:0.41
Array ( [0] => 0.41 [1] => 0.1 [2] => 0.09 [3] => 0.25 [4] => 0.15 )


第五次:

最大红包:0.32
Array ( [0] => 0.19 [1] => 0.06 [2] => 0.32 [3] => 0.18 [4] => 0.25 )

当您发现内容错误或代码bug,以及下载链接无法使用等,请点击屏幕右下角的上报错误来进行提交,我们会尽快修正。
本程序所有源码和工具完全免费,当本网站内容如果侵犯了您的权益,请联系我们,我们会尽快处理,感谢您的合作。

收藏 分享

相关文章

评论:

文明上网理性发言,请遵守 新闻评论服务协议

当前还没有评论,快来评论吧

上报错误