php 砍价

/**
     * 砍价算法-生成砍价金额
     *
     * @param int $people   砍价人数或次数
     * @param int $amount   砍价总额 单位元
     * @param int $min      最低砍价金额 不得低于0
     * @param int $max      最高砍价金额 砍价次数 * 最高砍价金额不得小于砍价总额
     * @param int $level    层级 防止递归超出限制
     *
     * @return array
     */
    public static function genRandomAmount($people = 0, $totalAmount = 0,$min_price = 0, $min = 0, $max = 0, $level = 1)
    {
        // 防止递归超出限制报异常,提前退出
        if ($level == 200) {
            return [];
        }

        $arr = [];

        // 数据错误直接返回
        if (empty($people) || empty($totalAmount)) {
            return [];
        }

        // 转换成分便于计算
        $tmpTotal = $totalAmount * 100;
        $tmpMin = $min * 100;
        $tmpMax = $max * 100;
        $tmpMinPrice = $min_price * 100;

        // 计算n-1次的随机金额,如果不减1,则会出现多减一次随机金额的问题,应该是最后的金额直接赋值
        for ($i = 0; $i < $people - 1; $i++) {
            $arr[$i] = mt_rand($tmpMin, $tmpMax);
            $tmpTotal = $tmpTotal - $arr[$i];
            if ($tmpTotal < $tmpMinPrice) {
                $tmpTotal = $tmpMinPrice - $tmpTotal;
                continue;
            }
        }

        if ($tmpTotal > $tmpMinPrice) {
            $tmpTotal = $tmpTotal - $tmpMinPrice;
            $arr[count($arr)] = $tmpTotal;
        } else {
            // 最后的价格直接使用最后剩余的价格
            $arr[count($arr) - 1] = $tmpTotal;
        }

        // 最后一次价格小于最小金额或者大于最大金额都不对,继续递归重新计算
        if ($tmpTotal < $tmpMin || $tmpTotal > $tmpMax) {
            return self::genRandomAmount($people, $totalAmount,$min_price, $min, $max, $level + 1);
        }

        // 返回单位元的数据
        return array_map(function ($value) {
            return $value / 100;
        }, $arr);
    }

    /**
     * 砍价算法-获取砍价金额
     *
     * @param int $people   砍价人数或次数
     * @param int $amount   砍价总额
     * @param int $min      最低砍价金额 不得低于0
     * @param int $max      最高砍价金额 砍价次数 * 最高砍价金额不得小于砍价总额
     *
     * @return array
     */
    public static function getRandomAmount($people = 0, $totalAmount = 0, $min_price = 0,$min = 0, $max = 0)
    {
        // 数据错误直接返回
        if (empty($people) || empty($totalAmount)) {
            return [];
        }

        if ($people * $max <= $totalAmount) {
            return [];
        }

        $arr = self::genRandomAmount($people, $totalAmount,$min_price, $min, $max);

        // 有几率会因为递归调用超出限制而返回空数组,这里继续重新生成,直到金额正确
        while (empty($arr)) {
            $arr = self::genRandomAmount($people, $totalAmount,$min_price, $min, $max);
        }

        return $arr;
    }

 

 砍价砍价商城小程序轻松搭建您的微信砍价小程序,强力度营销插件配合活动迅速吸粉变现。   ·多活动支持,每个活动单独设置砍价规则·支持货到付款及在线支付双重支付方式·抢购+砍价有效留存用户·每个用户可设置帮砍次数,有效屏蔽刷量 模块介绍: 砍价砍价商城小程序轻松搭建您的微信砍价小程序,强力度营销插件配合活动迅速吸粉变现。·多活动支持,每个活动单独设置砍价规则 ·支持货到付款及在线支付双重支付方式 ·抢购+砍价有效留存用户 ·每个用户可设置帮砍次数,有效屏蔽刷量 功能特色: 砍价+抢购双重营销多种订单模式适配活动设置多样性 支持多活动,单个活动可单独设置砍价规则,好友帮砍次数。 同时支持运费及商品类型设置。 适用不同行业 活动分商品类和服务类。可适配不同的行业需求,商品类活动用户提交订单后后台设置物流单号发货。服务类活动用户提交订单后自动生成二维码,凭二维码到线下门店核销。 砍价+抢购双重营销 同时支持砍价+抢购双重营销,后台活动管理中可随时开启。 适用于不同的用户需求。多商户多店员灵活管理 多商户灵活管理。不同活动及店员关联不同商户,后续还将开启商户端管理功能。 活动地域限制 适用于制作地区业务的用户。活动管理可开启地域限制,输入城市名称即可限制可参与活动的地区。 多种模板消息支持 后台自动生成模板消息,支持发起砍价砍价成功、订单提交成功、活动开始提醒等多种消息提示。 可无限生成小程序 一次购买砍价宝,可无限次生成小程序,不同小程序活动、订单等其他数据均独立,互不影响。 版本更新: 版本号:7.2.0 - 砍价_抢购_拼团 [优化]优化了开启抢购分享赚后海报生成时因文件名重叠而导致扫码后活动相同的问题。 [优化]修复了后台广告设置无法保存的问题。 [优化]修复了首页拼团列表拼团参与数为0的问题。 本次更新后请及时提交小程序端审核。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值