简单红包算法

function luckmoney($money_sum , $number_sum) {
    //循环总人数 -1 (最后一个人的红包用剩余的金额)
    for ( $i=1 ; $i < $number_sum ; $i++ ) {
        //每个人红包的上限
        $a = ($money_sum  - ($number_sum-$i)*0.01) / ($number_sum-$i);
        //一定范围的随机
        $money = mt_rand(1,$a*100) / 100;
        //总金额-分给用户的红包 = 下一批还可以分配的金额
        $money_sum -= $money;
        echo sprintf("第%s人的红包金额:%s",$i,$money).PHP_EOL;
    }
    $last_money = $money_sum;//没分完的给最后一个人
    echo sprintf("第10人的红包金额:%s",$last_money).PHP_EOL;
}
luckmoney(20,10);

可将生成的金额放到Redis的list中,顶端rpush 底部lpop,消费完成也就是红包抢完。详细代码参考这里

此条目发表在笔记分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注