php9宫格抽奖程序_php抽奖算法(适用于九宫格、大转盘)
public function doDraw()
{
// 獎品數組
$proArr = array(
// id => 獎品等級, name => 獎品名稱, v => 獎品權重
array('id'=>1,'name'=>'超級獎品','v'=>0),
array('id'=>2,'name'=>'特等獎','v'=>1),
array('id'=>3,'name'=>'一等獎','v'=>5),
array('id'=>4,'name'=>'二等獎','v'=>10),
array('id'=>5,'name'=>'三等獎','v'=>12),
array('id'=>6,'name'=>'四等獎','v'=>22),
array('id'=>7,'name'=>'五等獎','v'=>50),
array('id'=>8,'name'=>'六等獎','v'=>100),
array('id'=>9,'name'=>'七等獎','v'=>200),
array('id'=>10,'name'=>'沒中獎','v'=>500),
);
$arr = [];
foreach ($proArr as $key => $val) {
$arr[$val['id']] = $val['v'];
}
// 中獎 id
$rid = $this->get_rand($arr);
/**模擬抽獎測試**/
/* $i = 0;
while ( $i < 10000) {
$rid = $this->get_rand($arr);
$res[] = $rid;
$i++;
}
// 統計獎品出現次數
$result = array_count_values($res);
asort($result);
foreach ($result as $id => $times) {
foreach ($proArr as $gifts) {
if($id == $gifts['id']){
$response[$gifts['name']] = $times;
}
}
}
dump($response);
die;*/
// 中獎禮品
$result['yes'] = $proArr[$rid-1]['name'];
// 從原獎品數組中剔除已經中獎禮品
unset($proArr[$rid-1]);
// 打亂數組排序
shuffle($proArr);
for ($i=0; $i < count($proArr); $i++) {
$result['no'][] = $proArr[$i]['name'];
}
// foreach ($proArr as $k => $v) {
// // 沒中獎禮品
// $result['no'][] = $v['name'];
// }
dump($result);
}
public function get_rand($proArr = array()) {
if(empty($proArr)) die;
$rid = '';
// 概率數組的總權重
$proSum = array_sum($proArr);
// 概率數組循環
foreach ($proArr as $k => $proCur) {
// 從 1 到概率總數中任意取值
$randNum = mt_rand(1, $proSum);
// 判斷隨機數是否在概率權重中
if ($randNum <= $proCur) {
// 取出獎品 id
$rid = $k;
break;
} else {
// 如果隨機數不在概率權限中,則不斷縮小總權重,直到從獎品數組中取出一個獎品
$proSum -= $proCur;
}
}
unset($proArr);
return $rid;
}
總結
以上是生活随笔為你收集整理的php9宫格抽奖程序_php抽奖算法(适用于九宫格、大转盘)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数组翻转_算法系列之翻转单词顺序
- 下一篇: c语音 udp最大长度_c语言udp自定