/**
* 抽奖函数
* @param $prizes 奖品信息(二维数组)
* @return mixed|string
*/
function lotteryDraw($prizes)
{
// 计算总概率
$totalProbability = array_sum(array_column($prizes, 'lv'));
// 生成一个随机数作为抽奖结果
$randomNumber = mt_rand(1, $totalProbability);
// 根据随机数选择中奖项
foreach ($prizes as $prize) {
if ($randomNumber <= $prize['lv']) {
// 判断奖品数量是否足够
if ($prize['num'] > 0) {
// 中奖,返回奖品名称
return $prize;
} else {
// 奖品数量不足,重新抽奖
return '再接再厉,下次一定!';
}
} else {
$randomNumber -= $prize['lv'];
}
}
unset ($prizes);
// 所有奖品数量都为0,无法中奖
return '很遗憾,您未能中奖!';
}
// 示例用法
$rate = array(
array(
"id" => 1,//奖品id
"prize" => "一等奖",//奖品名称
"lv" => 1,//奖品中奖概率
"num" => 5,//奖品数量
),
array(
"id" => 2,
"prize" => "二等奖",
"lv" => 5,
"num" => 20,
),
array(
"id" => 3,
"prize" => "三等奖",
"lv" => 11,
"num" => 30,
),
array(
"id" => 4,
"prize" => "四等奖",
"lv" => 86,
"num" => 40,
)
);
$result = lotteryDraw($rate);
echo $result;
网友评论