微信红包随机生成算法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数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
php获得用户ip地址的比较不错的方法
Feb 08 PHP
Laravel框架表单验证详解
Sep 04 PHP
Yii快速入门经典教程
Dec 28 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
Mar 16 PHP
php简单实现数组分页的方法
Apr 30 PHP
php短信接口代码
May 13 PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 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编程函数安全篇
2013/01/08 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
php常用图片处理类
2016/03/16 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
浅谈React高阶组件
2018/03/28 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
挂职思想汇报
2013/12/31 职场文书
总经理助理职责
2014/02/04 职场文书
奥运会口号
2014/06/13 职场文书
三问三解心得体会
2014/09/05 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
2016年学校招生广告语
2016/01/28 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python