美文网首页
PHP红包算法

PHP红包算法

作者: 懒人程序猿 | 来源:发表于2019-08-27 11:49 被阅读0次

    代码

    <?php
    /**
     * 
     * 随机红包
     * @param float $money 发放金额
     * @param number $num 红包个数
     * @return number[]
     */
    function getRandomMoney($money = 6000.23, $num = 10)
    {
        if ($money * 100 < $num) {
            exit('单个红包金额不足1分!');
        }
        $result = array();
        $rem = ($money * 100) % $num;
        $mean = ($money * 100 - $rem) / $num;
        // 水平分割
        for ($i = 0; $i < $num; $i++) {
            $result[$i] = $mean;
        }
        // 水平分割后将取模多余部分分配给第一个红包
        $result[0] = $result[0] + $rem;
        // 随机分配金额
        for ($i = 0; $i < $num; $i++) {
            $r1 = rand(0, $num - 1);
            $r2 = rand(0, $num - 1);
            $per = rand(1, 99) / 100;
            // 随机金额
            $mon =  $result[$r1] - floor($result[$r1] * $per);
            if ($result[$r1] - $mon > 0) {
                // 减去随机金额
                $result[$r1] = $result[$r1] - $mon;
                // 添加随机金额
                $result[$r2] = $result[$r2] + $mon;
            }
        }
        return $result;
    }
    var_dump('<pre>', getRandomMoney(200.06, 6));
    var_dump('<pre>', getRandomMoney(200.06, 10));exit;
    

    输出1

    array(6) {
    [0]=>
    float(5544)
    [1]=>
    float(1805)
    [2]=>
    float(4704)
    [3]=>
    float(102)
    [4]=>
    float(7613)
    [5]=>
    float(238)
    }

    输出2

    array(10) {
    [0]=>
    float(1128)
    [1]=>
    float(6037)
    [2]=>
    float(403)
    [3]=>
    float(92)
    [4]=>
    float(60)
    [5]=>
    float(2594)
    [6]=>
    float(3147)
    [7]=>
    float(4638)
    [8]=>
    float(1726)
    [9]=>
    float(181)
    }

    相关文章

      网友评论

          本文标题:PHP红包算法

          本文链接:https://www.haomeiwen.com/subject/gjosectx.html