使用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(2)――PHP类型
Feb 15 PHP
php分页思路以及在ZF中的使用
May 30 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
Apr 24 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
Jul 11 PHP
一个经典实用的PHP图像处理类分享
Nov 18 PHP
codeigniter显示所有脚本执行时间的方法
Mar 21 PHP
js代码实现微博导航栏
Jul 30 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
Feb 25 PHP
mongodb和php的用法详解
Mar 25 PHP
PHP实现简单用户登录界面
Oct 23 PHP
php传值和传引用的区别点总结
Nov 19 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
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
javascript 使用正则test( )第一次是 true,第二次是false
2017/02/22 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
python网络编程实例简析
2014/09/26 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
爱护公物标语
2014/06/24 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
bose降噪耳机音能消除人声吗
2022/04/19 数码科技