使用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 相关文章推荐
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
thinkphp配置连接数据库技巧
Dec 02 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
PHP实现RTX发送消息提醒的实例代码
Jan 03 PHP
php批量修改表结构实例
May 24 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 PHP
PHP7内核之Reference详解
Mar 14 PHP
PHP实现简单注册登录系统
Dec 28 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
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
JavaScript闭包详解
2015/02/02 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
python编写爬虫小程序
2015/05/14 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
大学毕业感言
2014/01/10 职场文书
大二学期个人自我评价
2014/01/13 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
家长给学校的建议书
2014/05/15 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
天下第一关导游词
2015/02/06 职场文书
大学教师个人总结
2015/02/10 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
Python中for后接else的语法使用
2021/05/18 Python
vue中data里面的数据相互使用方式
2022/06/05 Vue.js