算法一
1 /**2 * 全概率计算3 *4 * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4)5 * @return string 返回上面数组的key6 */
7 function random($ps){8 static $arr = array();9 $key = md5(serialize($ps));10 if (!isset($arr[$key])) {11 $max = array_sum($ps);12 foreach ($ps as $k=>$v) {13 $v = $v / $max * 10000;14 for ($i=0; $i
算法二
1 function get_rand($proArr) {2 $result = '';3 //概率数组的总概率精度
4 $proSum = array_sum($proArr);5 //概率数组循环
6 foreach ($proArr as $key => $proCur) {7 $randNum = mt_rand(1, $proSum);8 if ($randNum <= $proCur) {9 $result = $key;10 break;11 } else{12 $proSum -= $proCur;13 }14 }15 unset ($proArr);16 return $result;17 }
算法二是一段经典的概率算法,$proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000这个概率范围内筛选第一个数是否在他的出现概率范围之内, 如果不在,则将概率