使用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面向对象全攻略 (七) 继承性
Sep 30 PHP
php将数据库中所有内容生成静态html文档的代码
Apr 12 PHP
解析php中const与define的应用区别
Jun 18 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 PHP
php解决安全问题的方法实例
Sep 19 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
smarty实现多级分类的方法
2014/12/05 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
jQuery 使用手册(一)
2009/09/23 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
python 日志 logging模块详细解析
2020/03/31 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
比驿:全球酒店比价网
2018/06/20 全球购物
资深生产主管自我评价
2013/09/22 职场文书
旅游管理专业个人求职信范文
2013/12/24 职场文书
公司年会晚宴演讲稿
2014/01/06 职场文书
2014年网管工作总结
2014/12/11 职场文书
苏州园林导游词
2015/02/03 职场文书
大学生团日活动总结
2015/05/06 职场文书