1相较于全概率抽奖,这种方法更快更小巧,把所有情况都放到数组里在返回数组就行了。
2遍历时前一个不成功的情况下也是有概率的,最后一个在前面都没抽到的情况下也一定能抽到;
3在抽奖是概率在小也能抽到奖,也能用这种方法。
function get_rand($proArr) {
$result = '';
$proSum = array_sum($proArr);
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$result = $key;
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}
这种方法效率也很不错。返回一个成功失败的数组就行了。