微信红包随机生成算法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 用checkbox一次性删除多条记录的方法
Feb 23 PHP
php设计模式 FlyWeight (享元模式)
Jun 26 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
php中spl_autoload详解
Oct 17 PHP
学习php开源项目的源码指南
Dec 21 PHP
typecho插件编写教程(三):保存配置
May 28 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
PHP Try-catch 语句使用技巧
Feb 28 PHP
Yii框架表单模型和验证用法
May 20 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 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 获取目录下的图片并随机显示的代码
2009/12/28 PHP
PHP自定义函数收代码
2010/08/01 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
js用图作提交按钮或超连接
2008/03/26 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
Django继承自带user表并重写的例子
2019/11/18 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
tensorflow常用函数API介绍
2020/04/19 Python
用python制作个视频下载器
2021/02/01 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
Oracle的内存结构(Memory structures)
2015/06/10 面试题
毕业生精彩的自我评价分享
2013/10/06 职场文书
公司2014年度工作总结
2014/12/10 职场文书
银行资信证明
2015/06/17 职场文书
工作会议简报
2015/07/20 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
如何基于python实现单目三维重建详解
2022/06/25 Python