PHPは確率により乱数を発生する

3364 ワード

4つの選択肢があると仮定します.aは10%、bは20%、Cは30%、dは40%で、原理はランダム数を取得し、区間を探すことです.もちろん、オプションの数は任意です.現在のデフォルトでは、合計は100%です.他の数が必要な場合は、乱数の範囲を変更すればよい.このアルゴリズムは、比較的簡単で、効率もまあまあです.
$data = array(

    'a' => 10 ,

    'b' => 20 ,

    'c' => 30 ,

    'd' => 40

);

echo randomSelect( $data ); 

   

function randomSelect( &$array ){

    $datas = $array ;

    if( !is_array($datas) || count($datas) == 0 )

        return ;

    asort($datas); //      

    $random = rand(1,100);

    $sum = 0 ;

   

    $flag = '';

    foreach($datas as $key => $data ){

        $sum += $data ;

        if( $random <= $sum ){

            $flag = $key;

            break ;

        }

    }

    if( $flag == '' ){ //             100 ,       。

        $keys = array_keys($datas);

        $flag = $keys[count($keys) - 1] ;

    }

    return $flag;

}