最近在写一个小程序,关于抽奖概率的问题,可以自由上传抽奖商品,每个商品是独立的,可以单独设置商品
比如
苹果抽中的概率是0.001
香蕉抽中的概率是0.01
橘子抽中的概率是0.05
鸭梨抽中的概率是5
谢谢惠顾的概率是100
我在这里提供一个思路,就是按照概率从小到大排序,然后取整 比如,只能是小于100的整数 !
那么苹果的倍率就是1/100000,整数是1 所以$data=mt_rand(1,100000) ; 如果随机数小于等于整数就表示抽中,则结束本次抽奖
如果 苹果,香蕉,橘子,鸭梨 按照这个顺序都没有抽中,则最后抽奖结果会在谢谢惠顾100%上!
下面是示例
<?php
$proArr=["苹果"=>0.01,"鸭梨"=>0.1,"葡萄"=>5,"谢谢惠顾"=>100];
$result = array();
//传入数组只取出概率
$arr=[];
foreach ($proArr as $key => $val) {
$arr[$key] = $val;
}
//按照概率排序
asort($arr);
print_R($arr);
foreach ($arr as $k => $v) {
$proSum=1;
//获取倍率
while(true){
$back=$v*$proSum;
if(strstr((string)$back, ".") == false){
$proSum=$proSum;
break;
}else{
$proSum=$proSum*10;
}
}
//获取整数
$proSumhead=$v*$proSum;
//获取倍率*100
$proSum=$proSum*100;
$randNum = mt_rand(1, $proSum);
echo "概率".$proSumhead."/".$proSum."___"."随机数".$randNum."\n";
if ($randNum <= $proSumhead) {
echo "恭喜抽中".$k;
break;
}
}
?>