--
//存放概率的数组 出现0的概率0.993 1的概率0.006 2的概率0.001
$arr=Array(0.993,0.006,0.001);
//计算概率中小数点位数最多的小数有多少位
$maxLength = 0;
foreach ($arr as $value) {
$temp = explode ('.', $value);
if (sizeof ($temp) > 1) {
$decimal = end ($temp);
$count = strlen ($decimal);
if($count>$maxLength){
$maxLength=$count;
}
}
}
//随机数的最大范围
$max=1;
for ($x=0; $x<$maxLength; $x++) {
$max.="0";
}
//计算出各个概率的随机数范围,即生成的随机数属于哪个概率
$baseArr=Array();
for ($x=0; $x<count($arr); $x++) {
if($x==0){
$baseArr[$x]=$arr[$x]*$max;
}
else{
$baseArr[$x]=$arr[$x]*$max+$baseArr[$x-1];
}
}
for ($i=0; $i<10000; $i++) {
//生成的随机数
$r=mt_rand(1,$max);
for ($x=0; $x<count($baseArr); $x++) {
if($r<=$baseArr[$x]){
echo $x."-";
break;
}
}
}