zoukankan      html  css  js  c++  java
  • PHP概率抽獎

    get_rand 方法是一段經典的概率算法,$proArr是一個預先設置的數組,例如數組為:array(1=>5,2=>10,3=>10,4=>20,5=>25,6=>30),鍵對應的是中獎等級,值對應中獎概率,開始從1,100這個概率範圍內篩選第一個數是否在它的出現概率範圍之內,如果不在,剛將概率空間範圍收縮,在本例當中就是減去5,也就是說第二個數在1,95這個範圍內篩選的。以此類推,這樣篩選到最終,總會有一個數滿足要求。這個算法裝簡單。到最終抽到數據在概率範圍內時,就將等級id返回。

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

    /*上面是獲取抽獎等級結果的方法,那麼在下面這裏設置一下中獎相關數據,以數組的形式表示,
      *id   中獎id
      *v    中獎概率
      *p    中獎獎品
      *注:所配置概率值必需為整數
      */

    $prize_arr = array( 
            array('id'=>1,'v'=>5, 'p'=>'一等獎'), 
            array('id'=>2,'v'=>10,'p'=>'二等獎'), 
            array('id'=>3,'v'=>10,'p'=>'三等獎'), 
            array('id'=>4,'v'=>20,'p'=>'四等獎'), 
            array('id'=>5,'v'=>25,'p'=>'優秀獎'), 
            array('id'=>6,'v'=>30,'p'=>'安慰獎'), 
        ); 

    /*
      *獎項相關數據設置完畢之後,接下來我們要做的就是要將中獎的數組數據重組生成:等級id=>等級對的應概率,這種方式交給get_rand方法去獲取得最終中獎的等級id
    */

    $rand_arr = array();
    foreach ($prize_arr as $key => $val) { 
        $rand_arr[$val['id']] = $val['v']; 
    }
    $rval = get_rand($rand_arr); //根據概率獲取中獎的等級id

    //最後獲取得到$rval這個就是中獎的等級id,根據這個id,我們就可以處理獎項數據

    $lucky = $unlucky = array();
    foreach($prize_arr as $key=>$val){
        if($val['id']==$rval){
            $lucky = $val;
        }else{
            $unlucky[] = $val;
        }
    }
    

    /*到了這裏,中獎的信息與沒有中獎的信息已經分開兩數組存放,。到最後就是處理結果,這裏簡單處理一下,看一下效果。到此,php處理的抽獎信息部分已經完成,至於其它的相關聯的處理操作,例如如果異步js的操作,這些不在此列出**/

    echo '恭喜你獲得:'.$lucky['p'];
  • 相关阅读:
    《浪潮之巅阅读笔记》4
    第十三周学习进度总结
    Android 自学之选项卡TabHost
    Android 自学之星级评分条RatingBar
    Android 自学之拖动条SeekBar
    Android 自学之进度条ProgressBar
    Android 自学之日期DatePicker、时间TimePicker选择器
    Android 自学之列表选择框Spinner
    Android 自学之自动完成文本框 AutoCompleteTextView
    Android 自学之基本界面组件(下)
  • 原文地址:https://www.cnblogs.com/helin/p/3051889.html
Copyright © 2011-2022 走看看