使用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 相关文章推荐
也谈截取首页新闻 - 范例
Oct 09 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
PHP 解决session死锁的方法
Jun 20 PHP
php数组添加元素方法小结
Dec 20 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
php中strtotime函数性能分析
Nov 20 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
php文件操作之文件写入字符串、数组的方法分析
Apr 15 PHP
微信推送功能实现方式图文详解
Jul 12 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中explode函数用法分析
2014/11/15 PHP
举例详解PHP脚本的测试方法
2015/08/05 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
js时间控件只显示年月
2017/01/08 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
Python中字符串对齐方法介绍
2015/05/21 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
python可视化text()函数使用详解
2020/02/11 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
医学毕业生自荐信
2013/10/11 职场文书
商务英语专业求职信范文
2014/01/28 职场文书
文化活动实施方案
2014/03/28 职场文书
运动会的口号
2014/06/09 职场文书
庆七一活动总结
2014/08/27 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
高三复习计划
2015/01/19 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
Python中的datetime包与time包包和模块详情
2022/02/28 Python
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技