关于抽奖概率问题 单独计算每个商品的抽中概率的算法php实现

最近在写一个小程序,关于抽奖概率的问题,可以自由上传抽奖商品,每个商品是独立的,可以单独设置商品

比如

苹果抽中的概率是0.001

香蕉抽中的概率是0.01

橘子抽中的概率是0.05

鸭梨抽中的概率是5

谢谢惠顾的概率是100

我在这里提供一个思路,就是按照概率从小到大排序,然后取整 所以这里概率不能存在俩位大于零的数字 比如,抽中一个物品的概率是0.32或者是0.69,只能是小于100的整数 或者小数点后只能有一位数字!

那么苹果的倍率就是1000,整数是1      所以$data=mt_rand(1,1000) ; 如果随机数小于等于整数就表示抽中,则结束本次抽奖

如果 苹果,香蕉,橘子,鸭梨 按照这个顺序都没有抽中,则最后抽奖结果会在谢谢惠顾100%上!

下面是示例

public function new_get_rand($proArr){
       $result = array();
        //传入数组只取出概率
        foreach ($proArr as $key => $val) {
            $arr[$key] = $val['v'];
			
        }
      
        //按照概率排序
        asort($arr);
        
		
		
		
        // 概率数组循环
        foreach ($arr as $k => $v) {
			
			$proSum=1;
			
			while(true){
                //取出整数
				$backjinzhi=$v*$proSum;
				if($backjinzhi>=1){
					$proSum=$proSum;
					break;
				}else{
					$proSum=$proSum*10;
				}
			}
			$proSumhead=$v*$proSum;
			$proSum=$proSum*100;
			
            $randNum = mt_rand(1, $proSum);
			   echo "随即数:".$randNum."<".$proSumhead."</br>"; 
			   echo "rand:".$proSum."=</br>";
			   echo "v:".$proSumhead."=</br>";
            if ($randNum <= $proSumhead) {
                $result = $proArr[$k];
                break;
            } 
        }
        return $result;
    }

猜你喜欢

转载自blog.csdn.net/zhang804633234/article/details/107294191