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