• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 分享实现PHP红包算法的思路(附开发代码)

分享实现PHP红包算法的思路(附开发代码)

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了PHP红包算法,PHP红包开发代码等相关知识,希望对您有所帮助

PHP红包算法,根据很多需求的使用场景,如发红包、砍价类需求,这两个功能都有一个同样的特点,如下:

红包

1、总金额

2、红包个数

3、最小红包数量


砍价

1、砍价总金额

2、需要多少人完成砍价(人数根据需求而定)

固定砍价人数

随机砍价人数

指定随机砍价人数

第2点三个规则都需要根据规则得出一个人数

3、最小砍价金额


开发思路

验证参数

最小金额不允许小于0

总金额不允许大于数量乘最小金额


分配金额

取得平均金额(总金额/剩余数量)

分配金额 平均金额小于等于最金额时直接分配最小金额

获取金额幅度比例 最小值不允许小于 -1 最大值不允许大于 1

得出分配金额 幅度计算(平均值*(1+幅度比例))

分配金额判断 分配金额小于最小金额或者分配金额大于 可领取最大金额 ((最小金额+剩余总金额)- (剩余数量×最小金额))时 重新分配金额

剩余最后一个则剩余所有金额都分配


开发代码

<?php /** * 发送红包 * Class sandRed */class sandRed{    #红包金额    protected $amount;    #红包个数    protected $num;    #领取的红包最小金额    protected $minAmount;    #红包分配结果    protected $amountArr = [];     public function __construct($amount, $num = 1, $minAmount = 1)    {        $this->amount = $amount;        $this->num = $num;        $this->minAmount = $minAmount;    }     /**     * 处理返回     * @return array     * @throws Exception     */    public function handle()    {        # 验证        if ($this->amount < $validAmount = $this->minAmount * $this->num) {            throw new Exception('红包总金额必须≥'.$validAmount.'元');        }        # 分配红包        $this->allot();        return $this->amountArr;    }     /**     * 分配红包     */    protected function allot()    {        # 剩余可分配的红包个数        $num = $this->num;         # 剩余可领取的红包金额        $amount = $this->amount;        while ($num >= 1) {            if ($num == 1) {                # 剩余一个的时候,直接取剩余红包                $coupon_amount = $this->formattingAmount($amount);            } else {                 # 平均金额                $avgAmount = $this->formattingAmount($amount / $num);                 # 分配金额                $countAllotAmount = $this->countAllotAmount($avgAmount, $amount, $num);                 # 剩余的红包的平均金额                $coupon_amount = $this->formattingAmount($countAllotAmount);            }            # 追加分配金额            $this->amountArr[] = $coupon_amount;             # 计算剩余金额            $amount -= $coupon_amount;             $num--;        }        # 随机打乱        // shuffle($this->amountArr);    }     /**     * 计算分配的红包金额     * @param float $avgAmount 每次计算的平均金额     * @param float $amount 剩余可领取金额     * @param int $num 剩余可领取的红包个数     * @return float     */    protected function countAllotAmount($avgAmount, $amount, $num)    {        # 如果平均金额小于等于最低金额,则直接返回最低金额        if ($avgAmount <= $this->minAmount) {            return $this->minAmount;        }        # 浮动比率        $floatingRate = $this->floatingRate();         # 分配金额        $allotAmount = $avgAmount * (1 + $floatingRate);         # 浮动计算        $coupon_amount = $this->formattingAmount($allotAmount);         # 如果低于最低金额或超过可领取的最大金额,则重新获取        if ($coupon_amount < $this->minAmount || $coupon_amount > $this->canReceiveMaxAmount($amount, $num)) {            return $this->countAllotAmount($avgAmount, $amount, $num);        }        ret
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享实现PHP红包算法的思路(附开发代码)

相关文章

  • Illustrator制作出超仿真的缝线文字效果
  • Photoshop设计水晶质感的立体盒子教程
  • Workerman中你不得不知道的属性reusePort
  • thinkphp5与laravel的区别是什么
  • 如何禁用WordPress 5.5+内置的图片延迟加载功能
  • 一分钟学会PHP中关于封装验证码(上)
  • AI教程几何图形小鸟LOGO视频教程
  • 全平台通用评论神器一键自动填写昵称、邮箱和网址
  • 使用css实现自适应标题浮动效果(代码实例)
  • 详解Laravel前端工程化之mix

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • PHP网站常见安全漏洞,及相应防范措施总结
    • Apache Log4j 2.17.0已发布!看看解决了什么问题?
    • 如何解决thinkphp new self()报错问题
    • 聊聊怎么将小程序项目转为uni-app项目
    • dedecms网站列表调用文章或图集的第一张图片原图
    • ThinkPHP5通过ajax插入图片并实时显示(完整代码)
    • 织梦DedeCMS实现按键盘方向键实现上一篇下一篇翻
    • 用PHP将女友照片转成可爱的动漫头像!
    • Photoshop设计粉色金属质感的字体教程
    • Centos MySQL 忘记密码怎么办

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有