有如下php数组,按照一定的比例(或者交权重)随机取:
要按照数值大小(1,5,9,3)的比例随机取一个元素出来,那$a['c']这个元素应该是最多比取到的,$a['a']是最少被取到的。
例子,用到了php随机数的相关知识。
<?
$a=array(
'a'=>1,
'b'=>5,
'c'=>9,
'd'=>3
);
$array_keys=array_keys($a);
$array_a=$a;
$sum=array_sum($a);
$rand=rand($a[$array_keys[0]], $sum);
$i=0;
$next=current($array_a);
$skeys=1;
foreach ($a as $key => $value) {
//是不是第一个元素
if($skeys==1 && $rand<=$value){
$skey=$array_keys[0];
break;
}
$i=$i+$value;
$next=$next+next($array_a);
if( ($i <= $rand) && ($rand <= $next)){
$skey=$array_keys[$skeys];
break;
}
$skeys++;
}
var_dump($skey);
?>