微信红包随机生成算法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小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
php实现的mongodb操作类
May 28 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
详细解读php的命名空间(二)
Feb 21 PHP
php写入文件不覆盖的实例讲解
Sep 17 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 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/03/05 PHP
《PHP编程最快明白》第三讲:php数组
2010/11/01 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
PHP实现的购物车类实例
2015/06/17 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
JavaScript面象对象设计
2008/04/28 Javascript
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
实例讲解python函数式编程
2014/06/09 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
Python新手如何理解循环加载模块
2020/05/29 Python
用Python 执行cmd命令
2020/12/18 Python
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
网络教育自我鉴定
2014/02/04 职场文书
十八大感想感言
2014/02/10 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
《学会看病》教学反思
2016/02/17 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
Vue router配置与使用分析讲解
2022/12/24 Vue.js