/*
* @params $arr = array("key1"=>'value1', "key2"=>"value2") key* 指的是值 value* 指的是机率,整数型
* @return int 返回的是 key 的值,当前得到的是哪个key
*/
function getRandomNum($arr)
{
$start = 0;
$randNum;
$totalNum = 0;
$result;
$selectKey;
foreach($arr as $key=>$value)
{
$tmp = array(
"begin"=>$start,
"end"=>$start + $value
);
$result[$key] = $tmp;
$start += $value;
$totalNum += $value;
}
$randNum = rand(1, $totalNum);
foreach($result as $key=>$value)
{
$tmpBeg = $value["begin"];
$tmpEnd = $value["end"];
if($randNum > $tmpBeg && $randNum <= $tmpEnd)
{
$selectKey = $key;
break;
}
}
return $selectKey;
}
$testArr = array(
1=>40,
2=>20,
3=>10,
4=>10,
5=>10,
6=>10
);
$i = 0; //统计会用到
$j = 10000; //测试的次数
for(; $j > 0; $j--)
{
$key = getRandomNum($testArr);
if($key == 4)
{
$i++;
}
}
var_dump($i);