PHP 取随机数

假设 有四个选项:a 占 10%,b占20% ,C占30% , d 占 40% ,原理就是现获取随机数,然后找区间。
当然了,选项的数量可以任意。
目前默认是 总和是 100% 。如果需要别的数,修改 随机数的范围即可。
这个算法,比较简单,效率也还算高。

当然因为是 rand() ,所以产生的是伪随机数,不是真正意义上的随机,能凑合着用吧。

 

/*
* ---a------b------------c---------d
* 1----11---------30--------60---------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 ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值