php实现红包功能代码
- 来源:纵横数据
- 作者:中横科技
- 时间:2018/3/13 9:54:03
- 类别:新闻资讯
本文主要和大家分享php实现的红包功能,主要以代码的形式和大家分享,由于是第一写红包对红包不是太了解,希望能帮助到大家。
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; |
可以基本实现红包功能 主要说说思想
场景 有个同学群 里面有 50个同学 为了庆祝聚会 要发红包
首先要求每个人必须领到红包 并且每个人领到红包概率基本相同
那么 每个人领到红包概率 = (红包现有的金额 - (当前没领到红包人数) * 每人最少领到红包的金额 )/ 当前没领到红包人数
$safe_total 每个人领到红包概率 $total 红包现有的金额 $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>" ; |