應用場景:抽獎,服務器分配等
/**
* @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);