使用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 相关文章推荐
打造计数器DIY三步曲(下)
Oct 09 PHP
Zend framework处理一个http请求的流程分析
Feb 08 PHP
PHP 反向排序和随机排序代码
Jun 30 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
利用php递归实现无限分类 格式化数组的详解
Jun 08 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
php使用PDO方法详解
Dec 27 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
php解决DOM乱码的方法示例代码
Nov 20 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
PHP使用观察者模式处理异常信息的方法详解
Sep 24 PHP
Yii框架 session 数据库存储操作方法示例
Nov 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实现小型站点广告管理(修正版)
2006/10/09 PHP
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
深入浅析python with语句简介
2018/04/11 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
Python列表与元组的异同详解
2019/07/02 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
应届生服装设计自我评价
2013/09/20 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书
普通党员整改措施
2014/10/24 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js