使用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 相关文章推荐
Thinkphp中Create方法深入探究
Jun 16 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
PHP中的日期加减方法示例
Aug 21 PHP
php去掉文件前几行的方法
Jul 29 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
php实现网页端验证码功能
Jul 11 PHP
PHP编译configure时常见错误的总结
Aug 17 PHP
PHP 断点续传实例详解
Nov 11 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 10 PHP
yii框架使用分页的方法分析
Jul 25 PHP
基于laravel belongsTo使用详解
Oct 18 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实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
vue实现鼠标经过动画
2019/10/16 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
python先序遍历二叉树问题
2017/11/10 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
Python和Sublime整合过程图示
2019/12/25 Python
Python 防止死锁的方法
2020/07/29 Python
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
abstract class和interface有什么区别
2013/08/04 面试题
让生命充满爱演讲稿
2014/05/10 职场文书
核心价值观演讲稿
2014/05/13 职场文书
抗震救灾标语
2014/06/26 职场文书
校园广播稿精选
2014/10/01 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书