微信红包随机生成算法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 相关文章推荐
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
smarty section简介与用法分析
Oct 03 PHP
php $_ENV为空的原因分析
Jun 01 PHP
PHP include_path设置技巧分享
Jul 03 PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
PHP中TP5 上传文件的实例详解
Jul 31 PHP
PHP SESSION机制的理解与实例
Mar 22 PHP
PHP大文件切割上传功能实例分析
Jul 01 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 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学习之正则表达式
2011/04/17 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
python查找第k小元素代码分享
2013/12/18 Python
Python环境变量设置方法
2016/08/28 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
python版大富翁源代码分享
2018/11/19 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
高三自我鉴定
2013/10/23 职场文书
最新的互联网创业计划书
2014/01/10 职场文书
七年级音乐教学反思
2014/01/26 职场文书
趣味运动会活动方案
2014/02/12 职场文书
民政局个人整改措施
2014/09/24 职场文书
社区文明倡议书
2015/04/28 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA