应用场景:抽奖,服务器分配等
/**
* @param array $weight 权重 例如array('a'=>10.5,'b'=>9.5,'c'=>80)
* @return string key 键名
*/
function arandom($weight = array()) {
//生成随机数
$roll = rand (1, array_sum($weight));
$_tmpW = 0;
$column = '';
//判断随机数所在区间
foreach ( $weight as $k => $v ) {
$min = $_tmpW;
$_tmpW += $v;
$max = $_tmpW;
if ($roll > $min && $roll <= $max) {
$column = $k;
break;
}
}
return $column;
}
//执行一万遍
$result = array();
for($i=0; $i<10000; $i++){
$row = arandom(array('a'=>10.5,'b'=>9.5,'c'=>80));
@$result[$row]++;
}
print_r($result);