八、PHP+AJAX實現發紅包功能

        PHP發紅包基本流程:當輸入完紅包數量和總金額後,PHP會根據這兩個值進行隨機分配每一個金額,保證每一個人都能領取到一個紅包,且每一個紅包金額不等。也就是每一個人領取的紅包金額要不一樣,而且全部紅包金額總額等於總金額。php

php發紅包實現原理:

        設定總金額爲10元,有N我的隨機領取:html

        N=1 第一個ajax

        則紅包金額=X元;json

        N=2 第二個安全

        爲保證第二個紅包能夠正常發出,第一個紅包金額=0.01至9.99之間的某個隨機數url

        第二個紅包=10-第一個紅包金額;spa

        N=3 第三個code

        紅包1=0.01至9.99之間的某個隨機數htm

        紅包2=0.01至(10-紅包1-0.01)的某個隨機數ip

        紅包3=10-紅包1-紅包2

        ……

        因而咱們獲得一個規律,在分配當前紅包金額時,先預留剩餘紅白所需最少金額,而後在0.01至總金額-預留金額間取隨機數,獲得的隨機數就是當前紅包分配的金額。

        實際應用中,程序先將紅包金額分配好,即發紅包時,紅包個數以及每一個紅包的金額都分配好了,那麼用戶來搶紅包時,咱們隨機給用戶返回一個紅包便可。

jQuery關鍵代碼:

  <script>
            $(function() {
                $("button").click(function() {
                    $.ajax({
                        type: 'POST',
                        url: 'bao.php',
                        dataType: 'json',
                        beforeSend: function() {
                            $("#result").html('正在分配紅包');
                        },
                        success: function(json) {
                            if (json.msg == 1) {
                                var str = '';
                                var res = json.res;
                                $.each(res, function(index, array) {
                                    str += '<p>第<span>' + array['i'] + '</span>個紅包,金額<span>' + array['money'] + '</span>元,餘額<span>' + array['total'] + '元</span></p>';
                                });
                                $("#result").html(str);
                            } else {
                                $("#result").html('數據出錯!');
                            }
                        }
                    });
                });
            });
        </script>

bao.php關鍵代碼

<?php

header("Content-Type: text/html;charset=utf-8");

$total = 20; //紅包總額  
$num = 10; // 分紅10個紅包,支持10人隨機領取 
$min = 0.01; //每一個人最少能收到0.01元  


for ($i = 1; $i < $num; $i++) {
    $safe_total = ($total - ($num - $i) * $min) / ($num - $i); //隨機安全上限  
    $money = mt_rand($min * 100, $safe_total * 100) / 100;
    $total = $total - $money;
    $arr['res'][$i] = array(
        'i' => $i,
        'money' => $money,
        'total' => $total
    );
}
$arr['res'][$num] = array('i' => $num, 'money' => $total, 'total' => 0);
$arr['msg'] = 1;
echo json_encode($arr);
?>
相關文章
相關標籤/搜索