抽選機能(賞品の当選番号と確率をカスタマイズ)
リリース: 2016-07-25 08:50:29
抽選システムに最適
- /*
- * 1 万分の 1 まで正確な宝くじカテゴリ
- * 3 つのステップ: 1. 当選確率の配列を受け入れる; 2. 宝くじのシードを受け入れる; 3. 当選レベルを返す
- * /
- class Lottory {
- /*
- * 当選確率の配列、賞品の数を自動的に決定します
- * 配列のキー値の合計が 100 で、当選しない確率を自動的に計算します、初期値が 100 を超える場合、エラーがスローされます
- */
- protected $_rate = array();
- /*
- * 勝つ確率を設定します
- * @param 配列、勝つ確率、配列として渡されます
- */
- public function setRate($rate = array(12.1, 34) ) {
- $this->_rate = $rate;
- if (array_sum($this->_rate) > 100)//問題があるかどうかを検出確率設定を使用して
- throw new Exception('勝率最大 100%') ;
- if (array_sum($this->_rate) // で与えられた確率で勝たない確率を定義します。ユーザーは合計が 100 になるのみ、0 は無視します
- $this->_rate[] = 100 - array_sum($this->_rate);
- }
-
- /*
- * 1 から 10000 までの整数シードをランダムに生成して送信します当選判定関数へ
- * @return int、当選確率でソート、当選番号を返す アイテム数
- */
-
- public function runOnce() {
- return $this->judge(mt_rand(0, 10000) ));
- }
-
- /*
- * 設定された確率に従って、乱数値が当選するかどうかを判定します
- * @param int,$seed 10000以内の乱数
- * @return int,$i でソートします合格確率を計算し、当選アイテムの数を返します
- */
-
- protected function judge($seed) {
- foreach ($this->_rate as $key => $value) {
- $tmpArr[$key + 1] = $value * 100;
- }
- //確率を 10 倍し、ランダム選択のために累積し、
- に結合 $tmpArr[0] = 0;
- foreach ($tmpArr as $key => $value) {
- if ($key > 0) {
- $tmpArr[$key] += $tmpArr[$key - 1];
- }
- }
- for ($i = 1; $i if ($tmpArr[$i - 1] < $seed && $seed < = $tmpArr[$i]) {
- return $i を返す (設定順)確率)
- }
- }
- }
- }
- $rate = array(33, 20, 2, 0.95, 12, 4.55);
- $a = 新しい宝くじ;
- $a->setRate($rate) ;
- for ($i = 0; $i <= 10000; $i++) {
- $b = $a->runOnce();
- @$rewards[$b]++;
- }
- unset($報酬['']);
- echo array_sum($rewards);
- ?>
-
-
-
-
-
-
- 10,000 回実行し、設定された確率と賞金の数を比較します
-
< ;th>確率を設定獲得数 |
-
% | |
-
% | | < ?php echo $rate[2]; ?>% | |
-
% | |
-
%< /td> | td> |
-
% | |
-
| |
-
-
-
-
-
コードをコピー
|
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31