<?php
/*
* 经典的概率算法,
* 数组中 probability 的总和(基数),基数越大越能体现概率的准确性。
* probability 的总和为100,那么 iPhone XR 对应的中奖概率就是1%,
* 如果 probability 的总和是10000,那中奖概率就是万分之一了。
*/
function getPrize($prizes) {
//概率数组的总概率精度
$sum = array_sum(array_column($prizes, 'probability'));
foreach ($prizes as $key => $item) {
$rand = mt_rand(1, $sum);
if($rand <= $item['probability']) {
$result = $item;
break;
}
$sum -= $item['probability'];
}
return $result;
}
/*
* 奖项数组
* level 表示中奖等级,prize 表示奖品,probability 表示中奖概率。
* probability 为0即意味着该奖项抽中的几率是0,
*
*
*/
$prizes = [
['level' => 1, 'prize' => 'iPhone XR', 'probability' => 5],
['level' => 2, 'prize' => 'iPhone X', 'probability' => 10],
['level' => 3, 'prize' => '华为 P20', 'probability' => 15],
['level' => 4, 'prize' => '小米 Note', 'probability' => 25],
['level' => 5, 'prize' => '谢谢参与', 'probability' => 45],
];
$result = getPrize($prizes);
var_export($result);
文章源自编程技术分享-https://mervyn.life/2a0c86cd.html 我的微信公众号
微信扫一扫
评论