21,886
社区成员
发帖
与我相关
我的任务
分享
<?php
/**
+------------------------------------------------------------------------------
* 根据概率进行字母抽奖程序-程序说明
+------------------------------------------------------------------------------
* @author horseluke http://www.phpchina.com/bbs/thread-104235-1-1.html
* @version 0.0.1 Build 20090210-2215 BUG FIX1
* @abstract 该程序主要演示随机抽取1——100中的任意一个整数,并且依据设置的概率得出其对应的字母号码。
+------------------------------------------------------------------------------
*/
/**
+------------------------------------------------------------------------------
* 根据概率进行字母抽奖程序-程序设置区。设置方法: $a['幸运字母']=整数概率(取值应在1——100之内);
* 可添加多个"$a['幸运字母']=整数概率",但要注意所有字母的概率总数为100。程序会自动检查。
+------------------------------------------------------------------------------
*/
$a['A']=10;
$a['B']=20;
$a['C']=30;
$a['D']=40;
/**
+------------------------------------------------------------------------------
* 根据概率进行字母抽奖程序-程序运行区。请勿修改!
+------------------------------------------------------------------------------
*/
$b_keynum=1;
$b[0]=0;
$a_key[0]='start';
$total_probability=0;
$total_probability_old=0;
//以下代码主要用于对1——100进行分段、提取抽奖字母并与特定分段相关联,然后显示出来。
foreach ($a as $key => $value){
if ($total_probability==0){
$total_probability_old=1;
}else{
$total_probability_old=$total_probability+1;
}
$total_probability = $total_probability + $value; //进行各分段的概率相加
$b[]=$total_probability; //该分段结束时候的数值
$a_key[]=$key; //该分段所对应的字母
$b_keynum++; //分段数
echo '幸运号码处在['.$total_probability_old.','.$total_probability.']这个区间的,幸运字母是:'.$key.'。<br />';
}
if($total_probability <> 100){ //检验总概率是否确实为100%。原理上来说用array_sum($a)也可以,但是前面都计算了$total_probability,所以......
echo '概率相加非100%,无法运行。程序即将退出......';
exit;
}
echo '<br /><br />-----下面进入抽奖时间------<br />';
$luckynum=mt_rand(1,100); //注意,不是(0,100)这样就会变成1/101概率。
echo '你抽到的幸运号码是:'.$luckynum.'。';
//分段循环比较。
for ($k=0;$k<$b_keynum;$k++){
$ki=$k+1;
if ( (($luckynum - $b[$k] >= 0 ) &&($luckynum - $b[$ki] <0)) || ($luckynum == $b[$ki]) ){
echo '因此,你抽到的幸运字母是:'.$a_key[$ki];
exit;
}
}
?>