使用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 01 PHP
php 随机排序广告的实现代码
May 09 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
php实现的一个简单json rpc框架实例
Mar 30 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 PHP
详解PHP编码转换函数应用技巧
Oct 22 PHP
php微信公众平台交互与接口详解
Nov 28 PHP
浅谈PHP命令执行php文件需要注意的问题
Dec 16 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 PHP
Yii框架安装简明教程
May 15 PHP
PHP autoload使用方法及步骤详解
Sep 05 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伪造referer实例代码
2008/09/20 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
Yii2如何批量添加数据
2016/05/17 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
php实现头像上传预览功能
2017/04/27 PHP
asp 取文本框名称代码
2008/12/02 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
浅谈javascript函数式编程
2015/09/06 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
简单说明Python中的装饰器的用法
2015/04/24 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
python 实现矩阵填充0的例子
2019/11/29 Python
python 实现让字典的value 成为列表
2019/12/16 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
银行实习自我鉴定
2013/10/12 职场文书
优秀德育工作者事迹材料
2014/05/07 职场文书