权重随机分配【通用】

权重随机分配算法实现
这是一个PHP实现的权重随机分配工具类,由leyangjun编写。该类提供了一个名为`randomByWeight`的方法,用于根据给定的权重数组随机返回一个值。方法通过生成一个随机数并比较权重范围来实现分配。

根据对应指定的权重随机分配对应的值【通用(各个语言自行实现即可)】

<?php
/**
 * 权重随机工具类
 * User: leyangjun
 * Date: 2018/9/1
 * Time: 上午10:37
 */

namespace Lyj\Lib;

class RandomTool
{
    /**
     * 根据全权重随机分配
     * @param array $weight
     * @demo randomByWeight(['le' => 1000, 'yang' => 200, 'jun' => 800])
     * @return int|string
     */
    public function randomByWeight($weight = array())
    {
        $randomVal = rand(1, array_sum($weight));
        
        $tmpWeight = 0;
        $randomNum = 0;

        foreach ($weight as $k => $v) {
            $min = $tmpWeight;
            $tmpWeight += $v;
            $max = $tmpWeight;

            if ($randomVal > $min && $randomVal <= $max) {
                $randomNum = $k;
                break;
            }
        }

        return $randomNum;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值