概率中奖

本文介绍了一个基于PHP实现的概率抽奖算法,该算法通过传入不同奖项及其对应的概率权重,随机抽取中奖结果。文章提供了完整的代码示例,展示了如何计算概率总和并根据随机数确定获奖ID。
<?php
    /**
     * [gailv description]
     * @param array $data
     * @return int $result 正确返回中奖ID 错误就返回0
     */
    function probability($data)
    {
        if (!is_array($data) || empty($data)) {
            return 0;
        }

        $result = 0;

        //概率和
        $probabilitySum = array_sum($data);

        foreach ($data as $key => $value) {
            $rand = mt_rand(1, $probabilitySum);
            if ($rand <= $value) {
                $result = $key;
            }else{
                $probabilitySum -= $value;
            }
        }

        return $result;
    }

    $data = array(
        1 => 10,
        2 => 30,
        3 => 40,
        4 => 90,
        10 => 100
    );

    var_dump(probability($data));


    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值