抽奖算法分析

**
 * 算法分析:假设为有个容器A(a1,a2,a3......an),从A个中随机取出一个an,要求an小于规定v,那么每一取出一个的可能性是
 * rate=v/100 中可能性,
 * 设置命中率为0.5,0.5=v/100;v=50
 * 同理:
 * 1/20=v/100;v=5,
 * @param array $proArr
 */


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; 
}

你可能感兴趣的:(抽奖算法分析)