写一个函数,可以根据各个元素的权重返回随机数 (加权随机数) function(Array_A,n) Array_A:是一个数组,表示各个元素出现的概率, n:为需要返回的元素个数 如果n=1,则返回一个元素(Array_A中的key) , n=2则返回两个元素(Array_A中的key) 示例: function({20,50,30},1): 返回长度为1的数组,其中返回值为{0}的概率为20/(20+50+30),返回值为{1}的概率为50/(20+50+30),返回值为{2}的概率为30/(20+50+30) * function({20,50,30},2): 返回长度为2的数组,其中返回值中包含{0}的概率为20/(20+50+30),返回值中包含{1}的概率为50/(20+50+30),返回值中包含{2}的概率为30/(20+50+30) 思考如何验证上面的随机数权重是有效的。
function MyRand( array $arr , $number ){ $sum = 0; # 处理数组的取值范围 foreach( $arr as $key => $value ){ $sum += $value; $new[] = $sum; } $return = []; # 循环指定次数 while( $number -- ){ $rand = mt_rand( 0 , $sum - 1 ); # 查找随机数相邻最近的key值 foreach ( $new as $key1 => $value2 ) { if( $rand < $value2 ){ $return[] = $key1; break; } } } return $return; } #关于随机权重的准确性可以多生成几组随机数、计算下出现的概率 echo '<pre/>'; $new = MyRand( [ 20 , 50 , 30] , 100000 ); //print_r( $new ); $test_result = array_count_values( $new ); print_r( $test_result ); exit;