使用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里的JS打印函数
Oct 09 PHP
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 PHP
php数组的概述及分类与声明代码演示
Feb 26 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
php读取mssql的ntext字段返回值为空的解决方法
Dec 30 PHP
PHP+Ajax实时自动检测是否联网的方法
Jul 01 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
PHP命名空间简单用法示例
Dec 28 PHP
Laravel5.7 数据库操作迁移的实现方法
Apr 12 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 13 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
ansible作为python模块库使用的方法实例
2017/01/17 Python
Django自定义用户认证示例详解
2018/03/14 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
python生成器推导式用法简单示例
2019/10/08 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
Shein英国:女性时尚网上商店
2019/04/10 全球购物
C#基础面试题
2016/10/17 面试题
人力资源部经理的岗位职责
2014/03/04 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
职工小家建设活动方案
2014/08/25 职场文书
电影雨中的树观后感
2015/06/15 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android