设为首页 收藏本站
查看: 464|回复: 0

[经验分享] PHP 红包功能代码

[复制链接]

尚未签到

发表于 2017-12-29 17:42:56 | 显示全部楼层 |阅读模式
  前段时间被问这个问题,最近有空就写写啦,还是挺有趣的
  首先做下抢红包方法分类:
  对于发红包的人来说,一共有大致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 因为除法可能出现无理数)
  大概就是这些啦!欢迎交流指正!~~~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429431-1-1.html 上篇帖子: 对于PHP中enum的好奇 下篇帖子: PHP基础知识之
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表