响应式电商网站制作,企业咨询诊断报告,网页应用生成器,30岁学WordpressPHP指定概率算法#xff0c;可用于刮刮卡#xff0c;大转盘等抽奖算法。假设#xff1a;有一个二维数组#xff0c;记录了所有本次抽奖的奖项信息#xff1a;$test_arr array(a20,b30,c50);a奖概率20%#xff0c;b奖概率30%#xff0c;c奖概率50%模拟函数执…PHP指定概率算法可用于刮刮卡大转盘等抽奖算法。假设有一个二维数组记录了所有本次抽奖的奖项信息$test_arr array(a20,b30,c50);a奖概率20%b奖概率30%c奖概率50%模拟函数执行过程总概率精度为203050100第一次数组循环$procur20假设抽取的随机数rand(1,100)假设抽到$randNum55如果$randNum20,则resulta否则进入下一循环总概率精度变为100-2080第二次数组循环$procur30假设抽取的随机数rand(1,80)假设抽到$randNum33如果$randNum30,则resultb否则进入下一循环总概率精度变为80-3050第三次数组循环$prosur50;假设抽取的随机数rand(1,50)不管怎么抽随机数都会那么得出resultc;因为样本没有改变虽然可能抽取的随机数不止一个但是概率是不变的。private 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;}抽奖示例代码/** 奖项数组* 是一个二维数组记录了所有本次抽奖的奖项信息* 其中id表示中奖等级prize表示奖品rate表示中奖概率。* 注意其中的rate必须为整数如果rate设置成0即意味着该奖项抽中的几率是0* 数组中rate的总和(基数)基数越大越能体现概率的准确性。* 本例中rate的总和为100那么MAC对应的 中奖概率就是1%* 如果rate的总和是10000那中奖概率就是万分之一了。*/$prize_arr array(0 array(id1,prizeMAC,rate1),1 array(id2,prizeiPhone,rate5),2 array(id3,prizeiPad,rate10),3 array(id4,prizeiWatch,rate12),4 array(id5,prizeiPod,rate22),5 array(id6,prize抱歉!再接再厉,rate50),);/** 每次前端页面的请求PHP循环奖项设置数组* 通过概率计算函数get_rand获取抽中的奖项id。* 将中奖奖品保存在数组$res[yes]中* 而剩下的未中奖的信息保存在$res[no]中。*/foreach ($prize_arr as $key $val) {$arr[$val[id]] $val[rate];}$rid get_rand($arr); //根据概率获取奖项id$res[yes] $prize_arr[$rid-1][prize]; //中奖项unset($prize_arr[$rid-1]); //将中奖项从数组中剔除剩下未中奖项shuffle($prize_arr); //打乱数组顺序for($i0;$i$pr[] $prize_arr[$i][prize];}$res[no] $pr; //未中奖项print_r($res);