欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php實(shí)現(xiàn)自定義中獎項(xiàng)數(shù)和概率的抽獎函數(shù)示例

 更新時間:2017年05月26日 10:37:07   作者:武燕銘  
這篇文章主要介紹了php實(shí)現(xiàn)自定義中獎項(xiàng)數(shù)和概率的抽獎函數(shù),涉及php字符串、數(shù)組的概率運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了php實(shí)現(xiàn)自定義中獎項(xiàng)數(shù)和概率的抽獎函數(shù)。分享給大家供大家參考,具體如下:

<?php
/*
* 一個抽獎類,精確到萬分之一
* 三個步驟:1.接受一個中獎概率數(shù)組;2.接受一個抽獎種子;3.返回中獎等級
*/
class Lottery {
/*
* 中獎概率數(shù)組,自動判斷獎項(xiàng)數(shù)目
* 數(shù)組鍵值和為100,自動計(jì)算出不中獎的概率,若初始是超過100拋出一個錯誤
*/
protected $_rate = array();
/*
* 設(shè)置中獎概率,
* @param Array,中獎概率,以數(shù)組形式傳入
*/
public function setRate($rate = array(12.1, 34)) {
$this->_rate = $rate;
if (array_sum($this->_rate) > 100)//檢測概率設(shè)置是否有問題
throw new Exception('Winning rate upto 100%');
if (array_sum($this->_rate) < 100)
//定義未中獎情況的概率,用戶給的概率只和為100時,則忽略0
$this->_rate[] = 100 - array_sum($this->_rate);
}
/*
* 隨機(jī)生成一個1-10000的整數(shù)種子,提交給中獎判斷函數(shù)
* @return int,按傳入的概率排序,返回中獎的項(xiàng)數(shù)
*/
public function runOnce() {
return $this->judge(mt_rand(0, 10000));
}
/*
* 按所設(shè)置的概率,判斷一個傳入的隨機(jī)值是否中獎
* @param int,$seed 10000以內(nèi)的隨機(jī)數(shù)
* @return int,$i 按傳入的概率排序,返回中獎的項(xiàng)數(shù)
*/
protected function judge($seed) {
foreach ($this->_rate as $key => $value) {
$tmpArr[$key + 1] = $value * 100;
}
//將概率乘十后累計(jì),以便隨機(jī)選擇,組合成
$tmpArr[0] = 0;
foreach ($tmpArr as $key => $value) {
if ($key > 0) {
$tmpArr[$key] += $tmpArr[$key - 1];
}
}
for ($i = 1; $i < count($tmpArr); $i++) {
if ($tmpArr[$i - 1] < $seed && $seed <= $tmpArr[$i]) {
return $i; //返回中獎的項(xiàng)數(shù)(按概率的設(shè)置順序)
}
}
}
}
$rate = array(33, 20, 2, 0.95, 12, 4.55);
$a = new Lottery;
$a->setRate($rate);
for ($i = 0; $i <= 10000; $i++) {
$b = $a->runOnce();
@$rewards[$b]++;
}
unset($rewards['']);
echo array_sum($rewards);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
</head>
<body>
<table>
<thead>運(yùn)行10000次,對比設(shè)置概率和中獎次數(shù)</thead>
<tr><th>設(shè)置概率</th><th>中獎次數(shù)</th></tr>
<tr><td><?php echo $rate[0]; ?>%</td><td><?php echo $rewards[1] ?></td></tr>
<tr><td><?php echo $rate[1]; ?>%</td><td><?php echo $rewards[2] ?></td></tr>
<tr><td><?php echo $rate[2]; ?>%</td><td><?php echo $rewards[3] ?></td></tr>
<tr><td><?php echo $rate[3]; ?>%</td><td><?php echo $rewards[4] ?></td></tr>
<tr><td><?php echo $rate[4]; ?>%</td><td><?php echo $rewards[5] ?></td></tr>
<tr><td><?php echo $rate[5]; ?>%</td><td><?php echo $rewards[6] ?></td></tr>
<tr><td><?php echo 'miss'; ?></td><td><?php echo $rewards[7] ?></td></tr>
</table>
</body>
</html>

PS:這里再為大家提供兩款功能類似的在線工具供大家參考:

在線隨機(jī)數(shù)字/字符串生成工具:
http://tools.jb51.net/aideddesign/suijishu

高強(qiáng)度密碼生成器:
http://tools.jb51.net/password/CreateStrongPassword

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php字符串(string)用法總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評論