上班需要做一个抽奖券的功能,需要人为设置中奖概率,因此我写了一个按照预设概率随机获取奖品下标的代码。功能是:给定几个正整数或者0,标记为各个商品被抽中的概率,然后随机选取抽到的商品。
<?php
function rnd($r){
$s=0;
for($i=count($r);$i-->0; ){
$s+=$r[$i];
if($r[$i]<0 || $r[$i]!==(int)$r[$i])throw new Exception('概率数字必须是正整数或0');
}
if(!$s)throw new Exception('至少一个商品概率大于0');
$a=rand()%$s;
$i=0;
for(;$i<count($r)-1;$i++){
$a-=$r[$i];
if($a<=0 && $r[$i])break;
}
return $i;
}
var_dump(rnd(array(1,0,0,0)));
var_dump(rnd(array(0,100,0,0)));
var_dump(rnd(array(0,0,2,0,3)));
?>
相关文档
随便看看
畅言模块加载中