PHP根据概率产生随机数

假设 有四个选项: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;
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。