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