使用PHP编写发红包程序


Posted in PHP onJuly 22, 2015

使用PHP发红包,当我们输入红包数量和总金额后,PHP会根据这两个值进行随机分配每个金额,保证每个人都能领取到一个红包,每个红包金额不等,就是要求红包金额要有差异,所有红包金额总额应该等于总金额。

我们先来分析下规律。

设定总金额为10元,有N个人随机领取:
N=1 第一个
则红包金额=X元;
N=2 第二个
为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数。
第二个红包=10-第一个红包金额;
N=3 第三个
红包1=0.01至9.99之间的某个随机数
红包2=0.01至(10-红包1-0.01)的某个随机数
红包3=10-红包1-红包2
……

于是我们得到一个规律,在分配当前红包金额时,先预留剩余红白所需最少金额,然后在0.01至总金额-预留金额间取随机数,得到的随机数就是当前红包分配的金额。

实际应用中,程序先将红包金额分配好,即发红包时,红包个数以及每个红包的金额都分配好了,那么用户来抢红包时,我们随机给用户返回一个红包即可。

红包分配代码:

$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; 
   
  echo '第'.$i.'个红包:'.$money.' 元,余额:'.$total.' 元 ';  
}  
echo '第'.$num.'个红包:'.$total.' 元,余额:0 元';

运行以上代码,会输出以下结果:

第1个红包,金额2.08元,余额17.92元
第2个红包,金额1.81元,余额16.11元
第3个红包,金额0.15元,余额15.96元
第4个红包,金额1.61元,余额14.35元
第5个红包,金额1.11元,余额13.24元
第6个红包,金额1.51元,余额11.73元
第7个红包,金额1.21元,余额10.52元
第8个红包,金额2.58元,余额7.94元
第9个红包,金额5.4元,余额2.54元
第10个红包,金额2.54元,余额0元

附上完整代码:

html代码

<script type="text/javascript" src="http://libs.useso.com/js/jquery/1.7.2/jquery.min.js"></script>
<style>
.demo{width:300px; margin:60px auto 10px auto}
@media only screen and (min-width: 420px) {
 .demo{width:500px; margin:60px auto 10px auto}
}

.demo p{height:62px; line-height:30px}
.demo p label{width:100px; text-align:right}
.input{width:140px; height:24px; line-height:14px; border:1px solid #d3d3d3}
button, .button {
 background-color: #f30;color: white;border: none;box-shadow: none;
 font-size: 17px;font-weight: 500;font-weight: 600;
 border-radius: 3px;padding: 15px 35px;margin: 26px 5px 0 0px;cursor: pointer; }
button:hover, .button:hover {background-color: #f00; }
#result{width:360px; margin:10px auto}
#result p{line-height:30px}
#result p span{margin:4px; color:#f30}
</style>
</head>

<body>
<div id="main">
 <div class="demo">
 <button>生成10个红包,总金额20元</button>
 </div>
 <div id="result"></div>
 <div class="ad_76090"><script src="/js/ad_js/bd_76090.js" type="text/javascript"></script></div><br/>
</div>
<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>

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);
?>

以上所述就是本文的全部内容了,希望对大家熟练应用php完成派红包程序有所帮助。

PHP 相关文章推荐
PHP 反射机制实现动态代理的代码
Oct 22 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
解析posix与perl标准的正则表达式区别
Jun 17 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
php实现RSA加密类实例
Mar 26 PHP
php转换颜色为其反色的方法
Apr 27 PHP
php处理复杂xml数据示例
Jul 11 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
laravel 获取某个查询的查询SQL语句方法
Oct 12 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
May 27 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 #PHP
php 把数字转换成汉字的代码
Jul 21 #PHP
通过Email发送PHP错误的方法
Jul 20 #PHP
php实现编辑和保存文件的方法
Jul 20 #PHP
php数组生成html下拉列表的方法
Jul 20 #PHP
php生成过去100年下拉列表的方法
Jul 20 #PHP
PHP基于文件存储实现缓存的方法
Jul 20 #PHP
You might like
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
PHPCMS的使用小结
2010/09/20 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
ExtJS 入门
2010/10/29 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
Python科学计算环境推荐——Anaconda
2014/06/30 Python
python求众数问题实例
2014/09/26 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
python中的itertools的使用详解
2020/01/13 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
会计专业毕业生推荐信
2013/11/05 职场文书
店铺转让协议书
2014/12/02 职场文书
预备党员群众意见
2015/06/01 职场文书
小人国观后感
2015/06/11 职场文书
求职信如何撰写?
2019/05/22 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python