/* 
 * 不同概率的抽奖原理就是把0到*(比重总数)的区间分块
 * 分块的依据是物品占整个的比重,再根据随机数种子来产生0-* 中的某个数
 * 判断这个数是落在哪个区间上,区间对应的就是抽到的那个物品。
 * 随机数理论上是概率均等的,那么相应的区间所含数的多少就体现了抽奖物品概率的不同。
 */  


function get_rand($proArr)
{
$result = array();
foreach ($proArr as $key => $val) { 
    $arr[$key] = $val['v']; 
}  
$proSum = array_sum($arr);      // 计算总权重
$randNum = mt_rand(1, $proSum);
$d1 = 0;
$d2 = 0;
for ($i=0; $i < count($arr); $i++)
{
    $d2 += $arr[$i];
    if($i==0)
    {
        $d1 = 0;
    }
    else
    {
        $d1 += $arr[$i-1];
    }
    if($randNum >= $d1 && $randNum <= $d2)
    {
        $result = $proArr[$i];
        break; // 注意这里,当我们已经匹配到奖品时,就应该直接退出循环
    }
}
unset ($arr); 
return $result;


}

发表回复

您的电子邮箱地址不会被公开。