ホームページ  >  記事  >  バックエンド開発  >  偉大な神の導きを求めてください

偉大な神の導きを求めてください

WBOY
WBOYオリジナル
2016-06-23 13:39:55808ブラウズ

抽選条件:
1等は1,000個、2等は30万個、3等は30万個です。ランダムな賞品をすぐに捨てるにはどうすればよいですか?配列を使用し、配列に賞品を入れてからランダムに投げるこの方法は少し遅く感じられ、賞品を獲得するまでに 1 ~ 2 秒かかります。他に何か方法はありますか?


ディスカッションへの返信 (解決策)

マスターの皆さんは新年を祝うために戻ってきましたか? アドバイスを待ってください!

テスト例

$ar = array(1 => 1000, 2 => 300000, 3 => 300000); //奖池while(array_sum($ar)) {  $n = get_rand($ar); //得到奖项级别,可打印出来看看分布情况  @$res[$n]++;}print_r($res);//看看中奖分布print_r($ar); //看看奖池是否有剩余function get_rand(&$proArr) {  $proSum = array_sum($proArr);  $randNum = mt_rand(1, $proSum);  foreach($proArr as $key => $proCur) {    $proSum -= $proCur;    if($randNum > $proSum) {      $proArr[$key]--; //从奖池里扣除      return $key;    }  }}
Array(    [2] => 300000    [3] => 300000    [1] => 1000)Array(    [1] => 0    [2] => 0    [3] => 0)

実用的な場合は、次の宝くじのために賞金プールの変更を保存する必要があります

私だったら... ユーザーまたは宝くじのコードをデータベースに入力し、フィールドを追加します。最後の「当選ステータス」は、0 = 当選しなかった、1 = 1等賞...
毎回、SQLのランダムステートメントを使用して、当選ステータスが0のユーザーを抽出し、更新します

Ifそれは確率に基づいた抽選であり、

$ar = array(1 => 10, 2 => 30, 3 => 60); //中奖概率for($i=0; $i<10000; $i++) { //抽奖1万次  $n = get_rand($ar); //得到奖项级别,可打印出来看看分布情况  @$res[$n]++;}print_r($res);//看看中奖分布function get_rand(&$proArr) {  $proSum = array_sum($proArr);  $randNum = mt_rand(1, $proSum);  foreach($proArr as $key => $proCur) {    $proSum -= $proCur;    if($randNum > $proSum) {      //$proArr[$key]--; //从奖池里扣除 因为是概率抽奖,这一句就不要了      return $key;    }  }}
Array(    [3] => 5955    [2] => 3059    [1] => 986)
の可能な結果です

マスター、皆さんは新年を祝うために戻ってきましたか?




アイデアはこの方法と似ています。

テスト例

$ar = array(1 => 1000, 2 => 300000, 3 => 300000); //奖池while(array_sum($ar)) {  $n = get_rand($ar); //得到奖项级别,可打印出来看看分布情况  @$res[$n]++;}print_r($res);//看看中奖分布print_r($ar); //看看奖池是否有剩余function get_rand(&$proArr) {  $proSum = array_sum($proArr);  $randNum = mt_rand(1, $proSum);  foreach($proArr as $key => $proCur) {    $proSum -= $proCur;    if($randNum > $proSum) {      $proArr[$key]--; //从奖池里扣除      return $key;    }  }}
Array(    [2] => 300000    [3] => 300000    [1] => 1000)Array(    [1] => 0    [2] => 0    [3] => 0)

実用的な場合は、次回の抽選に備えて賞金プールの変更を保存する必要があります




ああ、引用が間違っています! ! ! ! !
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。