**
* 算法分析:假设为有个容器A(a1,a2,a3......an),从A个中随机取出一个an,要求an小于规定v,那么每一取出一个的可能性是
* rate=v/100 中可能性,
* 设置命中率为0.5,0.5=v/100;v=50
* 同理:
* 1/20=v/100;v=5,
* @param array $proArr
*/
function get_rand($proArr) {
$result = '';
//概率数组的总概率精度
$proSum = array_sum($proArr);
//概率数组循环
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum); //抽取随机数
if ($randNum <= $proCur) {
$result = $key; //得出结果
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}
* 算法分析:假设为有个容器A(a1,a2,a3......an),从A个中随机取出一个an,要求an小于规定v,那么每一取出一个的可能性是
* rate=v/100 中可能性,
* 设置命中率为0.5,0.5=v/100;v=50
* 同理:
* 1/20=v/100;v=5,
* @param array $proArr
*/
function get_rand($proArr) {
$result = '';
//概率数组的总概率精度
$proSum = array_sum($proArr);
//概率数组循环
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum); //抽取随机数
if ($randNum <= $proCur) {
$result = $key; //得出结果
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}