使用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新手上路(三)
Oct 09 PHP
ADODB类使用
Nov 25 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
php登陆页的密码处理方式分享
Oct 14 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
php自定义错误处理用法实例
Mar 20 PHP
php实现比较全的数据库操作类
Jun 18 PHP
PHP中遇到的时区问题解决方法
Jul 23 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
Aug 02 PHP
PHP实现PDO操作mysql存储过程示例
Feb 13 PHP
PHP简单验证码功能机制实例详解
Mar 27 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和ACCESS写聊天室(二)
2006/10/09 PHP
使用数据库保存session的方法
2006/10/09 PHP
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
php集成开发环境详解
2019/09/24 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
javascript preload&amp;lazy load
2010/05/13 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
python如何建立全零数组
2020/07/19 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
水果花束:Fruit Bouquets
2017/12/20 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
追悼会上的答谢词
2014/01/10 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
出纳岗位职责
2015/01/31 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
初中语文教学研修日志
2015/11/13 职场文书
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS