php實現(xiàn)紅包功能代碼
- 來源:縱橫數據
- 作者:中橫科技
- 時間:2018/3/13 9:54:03
- 類別:新聞資訊
本文主要和大家分享php實現(xiàn)的紅包功能,主要以代碼的形式和大家分享,由于是第一寫紅包對紅包不是太了解,希望能幫助到大家。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | for ( $i =1; $i < $p ; ++ $i ) { $s2 = ( $sum - ( $p - $i ) * 0.01)/( $p - $i ); //echo $s2;die; $money = rand(1, $s2 *100); $money = number_format( $money /100,2, '.' , ',' ); $sum = $sum - $money ; $wamp [ $i ] = $money ; } //format_number(要轉換的浮點數,要分隔的符號) echo "<hr/>" ; echo "<pre>" ; print_r( $wamp ); echo "<pre>" ; } //echo 2; |
可以基本實現(xiàn)紅包功能 主要說說思想
場景 有個同學群 里面有 50個同學 為了慶祝聚會 要發(fā)紅包
首先要求每個人必須領到紅包 并且每個人領到紅包概率基本相同
那么 每個人領到紅包概率 = (紅包現(xiàn)有的金額 - (當前沒領到紅包人數) * 每人最少領到紅包的金額 )/ 當前沒領到紅包人數
$safe_total 每個人領到紅包概率 $total 紅包現(xiàn)有的金額 $min 人最少領到紅包的金額
那么 公式 就能 $safe_total = ($total - ($num - $i) * $min) / ($num - $i);
代碼不唯一 重要的就是 思想
下面是參考代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | function getRedGift( $total , $num = 10) { $min = 0.01; $wamp = array (); $returnData = array (); for ( $i = 1; $i < $num ; ++ $i ) { $safe_total = ( $total - ( $num - $i ) * $min ) / ( $num - $i ); //紅包金額的最大值 為了是大部分個人獲得的紅包金額一定 if ( $safe_total < 0) break ; $money = @mt_rand( $min * 100, $safe_total * 100) / 100; //隨機產生一個紅包金額 $total = $total - $money ; //剩余紅包總額 $wamp [ $i ] = round ( $money , 2); //保留兩位有效數字 } $wamp [ $i ] = round ( $total , 2); $returnData [ 'MoneySum' ] = $wamp ; $returnData [ 'newTotal' ] = array_sum ( $wamp ); return $returnData ; } //測試 $data = getRedGift(100, 10); echo "<pre>" ; print_r( $data ); echo "<pre>" ; |