有關抽獎的概率計算問題

中獎轉盤抽獎參考原文鏈接   https://www.helloweba.com/view-blog-216.html

翻牌子抽獎參考原文鏈接  https://www.helloweba.com/view-blog-184.html

最近接觸到一些翻牌,抽獎的問題,然後就上網查找了一些計算概率的方法,自己試了試,下邊爲例子說明

/**
 * 獎項配置中獎的概率一級中獎等級配置
 */
public function actionCeshi()
{
    $prize_arr = array(
        '0' => array('id' => 1, 'prize' => '平板電腦', 'v' => 1),
        '1' => array('id' => 2, 'prize' => '數碼相機', 'v' => 5),
        '2' => array('id' => 3, 'prize' => '音箱設備', 'v' => 10),
        '3' => array('id' => 4, 'prize' => '4G優盤', 'v' => 12),
        '4' => array('id' => 5, 'prize' => '10Q', 'v' => 22),
        '5' => array('id' => 6, 'prize' => '下次沒準就能中哦', 'v' => 50),
    );
    foreach ($prize_arr as $key => $val) {
        $arr[$val['id']] = $val['v'];
        /*   $arr = Array
           (
               [1] => 1,
               [2] => 5,
               [3] => 10,
               [4] => 12,
               [5] => 22,
               [6] => 50,
           );*/
    }

    $rid = $this->Lists($arr); //根據概率獲取獎項id
    $res['yes'] = $prize_arr[$rid - 1]['prize']; //中獎項
    unset($prize_arr[$rid - 1]); //將中獎項從數組中剔除,剩下未中獎項
    shuffle($prize_arr); //打亂數組順序
    for ($i = 0; $i < count($prize_arr); $i++) {
        $pr[] = $prize_arr[$i]['prize'];
    }
    $res['no'] = $pr;   // 除了中獎外的其他數據

    echo json_encode($res);
}


/**
 * 隨機算法 計算中獎率
 *
 * @param array 需要隨機的一維數組
 *              ['10', '20', '30']
 *
 * @return str 返回數組中的一個值
 *             10
 */
public function Lists($pro_arr)
{
    /*      $pro_arr = Array
          (
              [0] => 10,
              [1] => 20,
              [2] => 30,
          );*/
    $result = '';
    // 概率數組的總概率精度
    $pro_sum = array_sum($pro_arr);//60

    // 概率數組循環
    foreach ($pro_arr as $key => $pro_cur) {
        $rand_num = mt_rand(1, $pro_sum);//生成1-60的隨機數,mt_rand(min,max)

        if ($rand_num <= $pro_cur) {//如果生成的隨機數小於等於10,20,30的值
            $result = $key;//result等於0,1,2key            break;
        } else {
            $pro_sum -= $pro_cur;//60-=10,20,30
        }
    }

    unset ($pro_arr);
    return $result;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章