微信红包随机生成算法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中数据的批量导入(csv文件)
Oct 09 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
Jun 05 PHP
php操作xml
Oct 27 PHP
html静态页面调用php文件的方法
Nov 13 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
thinkPHP自定义类实现方法详解
Nov 30 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
PHP实现的操作数组类库定义与用法示例
May 24 PHP
yii2 在控制器中验证请求参数的使用方法
Jun 19 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
解决GD中文乱码问题
2007/02/14 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
js控制table合并具体实现
2014/02/20 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
Python实现ping指定IP的示例
2018/06/04 Python
详解python调用cmd命令三种方法
2019/07/08 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
python代码如何注释
2020/06/01 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
战友聚会主持词
2014/04/02 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
化学教育专业自荐信
2014/07/04 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书