PHP控制转盘抽奖代码,PHP 根据概率 实现抽奖转盘算法 代码
最近實(shí)現(xiàn)大轉(zhuǎn)盤(pán)功能涉及到抽獎(jiǎng)概率的算法問(wèn)題,整理了一下相關(guān)代碼,歡迎大家參考哈~~~
思路:
1. 錄入中獎(jiǎng)產(chǎn)品與中獎(jiǎng)概率數(shù)據(jù)//?獎(jiǎng)項(xiàng)id,獎(jiǎng)品,概率
$prize_arr?=?array(
'0'?=>?array('id'=>1,'prize'=>'平板電腦','v'=>2),
'1'?=>?array('id'=>2,'prize'=>'數(shù)碼相機(jī)','v'=>5),
'2'?=>?array('id'=>3,'prize'=>'音箱設(shè)備','v'=>10),
'3'?=>?array('id'=>4,'prize'=>'4G優(yōu)盤(pán)','v'=>15),
'4'?=>?array('id'=>5,'prize'=>'10Q幣','v'=>30),
'5'?=>?array('id'=>6,'prize'=>'空獎(jiǎng)','v'=>5),
);
2. 計(jì)算中獎(jiǎng)概率//計(jì)算中獎(jiǎng)概率
function?get_rand($proArr)?{
$result?=?'';
//概率數(shù)組的總概率精度
$proSum?=?array_sum($proArr);
//概率數(shù)組循環(huán)
foreach?($proArr?as?$key?=>?$proCur)?{
//返回隨機(jī)整數(shù)
$randNum?=?mt_rand(1,?$proSum);
if?($randNum?<=?$proCur)?{
$result?=?$key;
break;
}?else?{
$proSum?-=?$proCur;
}
}
unset?($proArr);
return?$result;
}
3. 返回中獎(jiǎng)信息function?get_prize($list?=?[]){
//拼裝獎(jiǎng)項(xiàng)數(shù)組
$list_ids?=?array_column($list,?'id');
$list_vs?=?array_column($list,?'v');
//?ID?為鍵,概率為值
$arr?=?array_combine($list_ids,?$list_vs);
//根據(jù)概率獲取獎(jiǎng)項(xiàng)id
$rid?=?get_rand($arr);
//中獎(jiǎng)項(xiàng)數(shù)組
$res['yes']?=?$list[$rid-1];
//將中獎(jiǎng)項(xiàng)從數(shù)組中剔除,剩下未中獎(jiǎng)項(xiàng)
unset($list[$rid-1]);
//?重置索引
$pr?=?array_values($list);
//未中獎(jiǎng)項(xiàng)數(shù)組
$res['no']?=?$pr;
//?返回中獎(jiǎng)數(shù)據(jù)
$result?=?[
'msg'???=>?'抽獎(jiǎng)成功~',
'code'??=>?0,
'data'??=>?$res['yes'],
];
return?$result;
}
函數(shù)調(diào)用方法:$result?=?get_prize($prize_arr);
echo?"
";print_r($result);
結(jié)果如下:
轉(zhuǎn)載請(qǐng)注明出處~~~~
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的PHP控制转盘抽奖代码,PHP 根据概率 实现抽奖转盘算法 代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php写新闻浏览历史,PHP实现浏览历史
- 下一篇: php basic publish,Ra