微信红包随机生成算法php版


Posted in PHP onJuly 21, 2016

想了想,自己写写php版的微信红包随机生成算法,能不能实现类似的功能(其实也不敢说是算法)。
// $bonus_total 红包总金额
// $bonus_count 红包个数
// $bonus_type 红包类型 1=拼手气红包 0=普通红包

function randBonus($bonus_total=0, $bonus_count=3, $bonus_type=1){
  $bonus_items  = array(); // 将要瓜分的结果
  $bonus_balance = $bonus_total; // 每次分完之后的余额
  $bonus_avg   = number_format($bonus_total/$bonus_count, 2); // 平均每个红包多少钱
  $i       = 0;
  while($i<$bonus_count){
    if($i<$bonus_count-1){
      $rand      = $bonus_type?(rand(1, $bonus_balance*100-1)/100):$bonus_avg; // 根据红包类型计算当前红包的金额
      $bonus_items[] = $rand;
      $bonus_balance -= $rand;
    }else{
      $bonus_items[] = $bonus_balance; // 最后一个红包直接承包最后所有的金额,保证发出的总金额正确
    }
    $i++;
  }
  return $bonus_items;
}

好吧,我们现在来体验一下

// 发3个拼手气红包,总金额是100元
$bonus_items  = randBonus(100, 3, 1);
// 查看生成的红包
var_dump($bonus_items);
// 校验总金额是不是正确,看看微信有没有坑我们的钱
var_dump(array_sum($bonus_items));

另一个使用数组实现的版本,原理差不多:

function sendRandBonus($total=0, $count=3, $type=1){
  if($type==1){
    $input     = range(0.01, $total, 0.01);
    if($count>1){
      $rand_keys = (array) array_rand($input, $count-1);
      $last    = 0;
      foreach($rand_keys as $i=>$key){
        $current  = $input[$key]-$last;
        $items[]  = $current;
        $last    = $input[$key];
      }
    }
    $items[]    = $total-array_sum($items);
  }else{
    $avg      = number_format($total/$count, 2);
    $i       = 0;
    while($i<$count){
      $items[]  = $i<$count-1?$avg:($total-array_sum($items));
      $i++;
    }
  }
  return $items;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
一个连接两个不同MYSQL数据库的PHP程序
Oct 09 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
深入PHP变量存储的详解
Jun 13 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
php去除html标记的原生函数详解
Jan 27 PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 PHP
php实现评论回复删除功能
May 23 PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
详细解读php的命名空间(一)
Feb 21 PHP
PHP7数组的底层实现示例
Aug 25 PHP
php集成动态口令认证
Jul 21 #PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 #PHP
微信随机生成红包金额算法php版
Jul 21 #PHP
PHP简单读取PDF页数的实现方法
Jul 21 #PHP
基于PHP微信红包的算法探讨
Jul 21 #PHP
php中preg_replace_callback函数简单用法示例
Jul 21 #PHP
PHP获取客户端及服务器端IP的封装类
Jul 21 #PHP
You might like
php分页示例代码
2007/03/19 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
javascript 获取网页标题代码实例
2014/01/22 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
jQuery实现定时隐藏对话框的方法分析
2018/02/12 jQuery
vue实现在线翻译功能
2019/09/27 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
2020/08/20 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
Python生成随机数的方法
2014/01/14 Python
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
2014的自我评价
2014/01/13 职场文书
精彩的广告词
2014/03/19 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
七一建党节演讲稿
2014/09/11 职场文书