假設 有四個選項: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;
- }