ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルで書かれた宝くじプログラムの当選確率アルゴリズム

PHP_PHP チュートリアルで書かれた宝くじプログラムの当選確率アルゴリズム

WBOY
WBOYオリジナル
2016-07-13 09:53:54749ブラウズ

phpで書かれた宝くじプログラムの当選確率アルゴリズム

この記事では、スクラッチカード、ビッグルーレット、その他の宝くじアルゴリズムに使用できるphp当選確率アルゴリズムを共有します。使い方は非常に簡単で、コード内に詳細なコメントが記載されているので、必要な方が参照できます。

最初にバックエンド PHP プロセスを完了します。PHP の主な仕事は、フロントエンド ページがクリックして特定のボックスを反転すると、バックエンド PHP に ajax リクエストを送信することです。バックエンド PHP は、設定された確率に基づいて確率を渡します。アルゴリズムは当選結果を与えると同時に、未当選の賞品情報を JSON データ形式でフロントエンド ページに送信します。

まずは確率計算関数を見てみましょう

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

関数 get_rand($proArr) {

$結果 = '';

//確率配列の合計確率精度

$proSum = array_sum($proArr);

//確率配列ループ

foreach ($proArr as $key => $proCur) {

$randNum = mt_rand(1, $proSum);

if ($randNum

$result = $key;

休憩;

} 他 {

$proSum -= $proCur;

}

}

設定解除 ($proArr);

$result を返す;

}

上記のコードは、古典的な確率アルゴリズムです。$proArr は配列 (100,200,300,400) であると仮定します。最初の数値が確率範囲 1,1000 内に出現するかどうかを検査します。そうでない場合、確率空間、つまり k の値から今の数値の確率空間を差し引いた値、この場合はマイナス 100 です。これは、2 番目の数値が 1,900 であることを意味します。範囲内でフィルター処理されます。このようにして、最後まで要件を満たす数が必ず存在します。それは、箱の中の何かに触れるようなものです。最初のものがそこになく、2 つ目も存在せず、3 つ目も存在しない場合は、最後のものが存在するはずです。このアルゴリズムはシンプルで非常に効率的です。重要なのは、このアルゴリズムが以前のプロジェクト、特に大量のデータを含むプロジェクトに適用されているということです。

次に、PHP を通じて賞を設定します。

?

1

2

3

4

5

6

7

8

$prize_arr = 配列(

'0' => 配列('id'=>1,'賞品'=>'タブレット','v'=>1),

'1' => 配列('id'=>2,'賞品'=>'デジタルカメラ','v'=>5),

'2' => array('id'=>3,'賞品'=>'スピーカーデバイス','v'=>10),

'3' => 配列('id'=>4,'賞品'=>'4G USBフラッシュドライブ','v'=>12),

'4' => 配列('id'=>5,'賞品'=>'10Q コイン','v'=>22),

'5' => array('id'=>6,'prize'=>'次回は当たるかもしれません','v'=>50),

);

この二次元配列は、この宝くじのすべての賞品情報を記録します。ここで、idは当選レベルを表し、priseは賞金を表し、vは当選確率を表します。 v は整数である必要があることに注意してください。対応する賞の v を 0 に設定できます。これは、賞を獲得する確率が 0 であることを意味します。配列 (基数) 内の v の合計は大きくなります。正確な確率を反映することができます。この例では、v の合計が 100 であるため、タブレットの当選確率は 1% になります。v の合計が 10,000 の場合、当選確率は 1 万分の 1 です。

フロントエンドページがリクエストされるたびに、PHPは特典設定配列をループし、確率計算関数get_randを通じて抽選された特典IDを取得します。当選賞品を配列 $res['yes'] に保存し、残りの非当選情報を $res['no'] に保存し、最後に json 数値データをフロントエンド ページに出力します。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

foreach ($prize_arr as $key => $val) {

$arr[$val['id']] = $val['v'];

}

$rid = get_rand($arr) //確率に基づいて特典 ID を取得します

$res['yes'] = $prize_arr[$rid-1]['prize'] //賞品を獲得します

;

unset($prize_arr[$rid-1]); //未獲得の賞品を残して、配列から当選賞品を削除します

shuffle($prize_arr); //配列の順序を入れ替えます

for($i=0;$i

$pr[] = $prize_arr[$i]['賞'];

}

$res['no'] = $pr;

echo json_encode($res);

ネチズンの実装方法も添付します

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

/**

* お楽しみ抽選会

* @param int $total

*/

関数getReward($total=1000)

{

$win1 = フロア((0.12*$total)/100);

$win2 = フロア((3*$合計)/100);

$win3 = フロア((12*$total)/100);

$other = $total-$win1-$win2-$win3;

$return = array();

($i=0;$i

{

$return[] = 1;

}

for ($j=0;$j

{

$return[] = 2;

}

($m=0;$m

{

$return[] = 3;

}

for ($n=0;$n

{

$return[] = 'ご愛顧ありがとうございます';

}

シャッフル($return);

return $return[array_rand($return)];

}

$data = getReward();

$data をエコー;

?>

以上がこの記事の全内容ですが、皆さんに気に入っていただければ幸いです。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1000076.html技術記事 PHP で書かれた宝くじプログラムの当選確率アルゴリズム この記事では、スクラッチ カード、ビッグ ホイール、その他の宝くじアルゴリズムに使用できる PHP 当選確率アルゴリズムを紹介します。使い方はとても簡単で、コード内に詳細なコメントが付いています...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。