微信红包随机生成算法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 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
vBulletin Forum 2.3.xx SQL Injection
Oct 09 PHP
用PHP和ACCESS写聊天室(五)
Oct 09 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
PHP输出时间差函数代码
Jan 28 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
Laravel 5.3 学习笔记之 安装
Aug 28 PHP
PHP进程通信基础之信号
Feb 19 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
php实现数组重复数字统计实例
Sep 30 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学习之 认清变量的作用范围
2010/01/26 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
首页图片漂浮效果示例代码
2014/06/05 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
投标授权委托书范文
2014/08/02 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
小学生交通安全寄语
2015/02/27 职场文书
保研专家推荐信范文
2015/03/25 职场文书
夫妻吵架保证书
2015/05/08 职场文书
小学同学聚会感言
2015/07/30 职场文书
环保建议书作文400字
2015/09/14 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
python 如何用terminal输入参数
2021/05/25 Python
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript