使用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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
PHP调用三种数据库的方法(2)
Oct 09 PHP
怎样在UNIX系统下安装php3
Oct 09 PHP
windows下PHP APACHE MYSQ完整配置
Jan 02 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
PHP学习笔记(三):数据类型转换与常量介绍
Apr 17 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
php实现点击可刷新验证码
Nov 07 PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 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
php设计模式之单例模式实例分析
2015/02/25 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
jQuery实现的分页插件完整示例
2020/05/26 jQuery
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
python实现计算资源图标crc值的方法
2014/10/05 Python
python实现定时发送qq消息
2019/01/18 Python
Python实现分数序列求和
2020/02/25 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
学习Python爬虫的几点建议
2020/08/05 Python
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
研究生毕业鉴定
2014/01/29 职场文书
幼儿教育感言
2014/02/05 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
护士求职简历自我评价
2015/03/10 职场文书
简单的辞职信模板
2015/05/12 职场文书