首頁 >後端開發 >PHP問題 >php程式碼怎麼實現紅包功能

php程式碼怎麼實現紅包功能

藏色散人
藏色散人原創
2021-11-02 09:39:072681瀏覽

php程式碼實現紅包功能的方法:1、透過distribute_red_bages方法實作拼手氣紅包;2、透過average_red_bages方法實作均分紅包;3、透過rob_red_bages方法實作規定紅包數。

php程式碼怎麼實現紅包功能

本文操作環境:Windows7系統、PHP7.1版、DELL G3電腦

php程式碼怎麼實作紅包功能?

PHP 紅包功能代碼

前段時間被問到這個問題,最近有空就寫寫啦,還是挺有趣的

首先做下搶紅包方法分類:

對於發紅包的人來說,一共有大致3類(其他的我暫時沒想到,有想到可以聯繫我呀~)

#一、拼手氣紅包個數不定(完全看運氣)

二、拼手氣紅包規定個數(個數一定,至少一分)

三、平均分紅包(個數一定,大家平分)還是這個好寫吧!嘿嘿

上程式碼:

<?php
var_dump(rob_red_bages(5 , 10));
var_dump(distribute_red_bages(5));
/*
方法主要功能:拼手气红包(个数不定)
一个参数
    参数一: 红包总金额(按分计算)
*/
function distribute_red_bages($sum){
    $sum = $sum*100;
    $i=0;
    while($sum>0){
        $temp = rand(1 , $sum);//红包值
        $sum -= $temp;
        $arr[$i++] = $temp/100;
    }
    //check($arr);
    return $arr;
}
/*
方法主要功能:均分红包
两个参数:
    参数一: 红包总金额
    参数二: 均分个数
*/
function average_red_bages($sum , $num){
    $res = $sum/$num;
    for($i=0 ; $i<$num ; $i++){
        $arr[$i] = $res;
    }
    //check($arr);
    return $arr;
}
/*
方法主要功能:规定个数的手气红包
两个参数: 
    参数一:红包总金额
    参数二:红包个数
    
    计算流程,随机生成num个数
    求和得到m
    用sum/m 得到每个数需要k
    用随机数*k
*/
function rob_red_bages($sum , $num){
    $sum = $sum*100;
    for($i=0 ; $i<$num ; $i++){
        $temp = rand(1 , $sum);
        $arr[$i] = $temp;
        $sumall += $temp;
    }
    $k = $sum/$sumall;
    for($i=0 ; $i<sizeof($arr); $i++){
        $arr2[$i] = $arr[$i]*$k/100;        
    }
    return $arr2;
}
/*红包总额检测*/
function check($arr){
    foreach($arr as $a){
        $sum += $a;
        echo $a."+";
    }
    
    echo " 0 =".$sum."\n";
}
?>

下面分析下拼手氣紅包吧(平分的就不說了,大家都會):

拼手氣紅包個數不定思路: (總金額:sum)

 ---->隨機第一個小於sum的數: n 

 ---->總金額減去該數: temp = sum -n 

 ---->隨機小於temp的數字

 ---->遞迴上述方法直到總金額為0

 ---- >傳回儲存隨機結果的陣列

這個方法比較常規,用來實作規定個數的紅包也是可以實現的!不過~

拼手氣紅包規定個數想法(總數sum,紅包個數num )

 ---->隨機num個小於sum的數,產生陣列

 ---->對這些數字求和得到allsum

 ---->用sum除以allsum得到所有生成數的公倍數

 ----> ;數組每個元素與公倍數相乘得到每個紅包的數值

這個方法有缺點(最終的結果可能會略大於sum,或者略小於sum 因為除法可能出現無理數)

大概就是這些啦!歡迎交流指正! ~~~

推薦學習:《PHP影片教學

以上是php程式碼怎麼實現紅包功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn