一个简单的抽奖概率函数

一个简单的抽奖概率函数


摘要:该函数主要是判断产生的随机数所在的概率范围...

一个简单的抽奖概率函数:


/**
 * 简单的抽奖概率函数
 * @param array $rewardArray 概率,如:$rewardArray = array(10, 20, 20, 30, 10, 10),对应各奖品的概率
 * @return int    概率数组的下标
 */
function luckDraw($rewardArray)
{
	$sum = array_sum($rewardArray);

	if($sum !== 100)
	{
		return 'Error:The sum of values in $rewardArray Must be equal to 100!';
	}

	//获取随机数
	$rewardNum = mt_rand(0, $sum - 1);

	$totalnum = count($rewardArray);
	for($i = 0; $i < $totalnum; $i++)
	{
		if($i == 0)
		{
			if($rewardArray[$i] > $rewardNum && $rewardNum >= 0)
			{
				return $i;
			}
		}
		else
		{
			$max = $min = 0;
			for($j = 0; $j <= $i; $j++)
			{
				$max = $max + $rewardArray[$j];
			}
			for($k = 0; $k < $i; $k++)
			{
				$min = $min + $rewardArray[$k];
			}
			if($max > $rewardNum && $rewardNum >= $min)
			{
				return $i;
			}
		}
	}
}

该函数主要是判断产生的随机数所在的概率范围。


示例:


$rewardArray = array(10, 20, 20, 30, 10, 10);

//各概率对应值范围
//10,:0-10
//20:10-30
//20:30-50
//30:50-80
//10:80-90
//10:90-100

echo luckDraw($rewardArray);


转载于:https://my.oschina.net/yonghan/blog/474003

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值