当選確率が異なる抽選(ガチャ)をPHPで作成
ソシャゲのガチャみたいな、当選確率が異なる抽選をPHPで作成したかった。調べたところ以下方法でいけるみたい。
ソース
<?php //ガチャ用データ $data = array( 0 => array('name' => '星1', 'rate' => 30), 1 => array('name' => '星2', 'rate' => 25), 2 => array('name' => '星3', 'rate' => 20), 3 => array('name' => '星4', 'rate' => 15), 4 => array('name' => '星5', 'rate' => 9), 5 => array('name' => '星6', 'rate' => 1), ); echo $data[gacha($data)]['name']; //当たった配列のnameを出力 function gacha( $data = array() ){ //確率の合計値 $max = 0; foreach( $data as $record ) $max += $record['rate']; //当たりの決定 $hit = mt_rand( 0, ($max - 1) ); //当たった乱数がどの部分になるのか調べてヒットしたら返す foreach( $data as $key => $record ){ $max -= $record['rate']; if( $max <= $hit ) return $key; } } ?>
使い方補足
rateが確率の部分。整数値でも小数値でも良い。合計を100にするとパーセンテージとして分かりやすい。100を超えても問題ない。
その他
最初は確率分の配列を作って、そこからランダムに引けば良いのかと思った。例のソースの場合だと計100個の値が入った配列を作ってそこから引くというもの。ただこれだとデータ数が多い場合に負荷がかかるみたい。
関連記事
-
-
複数の方法で301リダイレクト
サイトのディレクトリやファイル名を大幅に変えるという案件があった。それ自体は問題 ...
-
-
ファイルの更新日付取得とリネーム
やりたかった事は、画像ファイルの更新日時取得と リネーム。 ■参考サイト htt ...
-
-
javascriptでHTML内に関数を書きたい場合
ダイアログ確認したいだけでわざわざfunctionを 書くのもアレだという時に使 ...
-
-
PHPとSQLiteで簡易BBSの作成
PHPとSQLiteの練習で簡易掲示板を作ったのでメモ。 &nbs ...
-
-
PHPでcharset
header("Content-Type: text/html; charset ...
-
-
ページング処理用PHP
/* @内容 ページング処理のfunction @使い方 //******親ペー ...
-
-
composerでmonologとTwigをインストール
「composerで○○をインストール」というのをよく見かけるがcomposer ...
-
-
Codeigniterで異なるデータベースを使用する
Codeigniterで2つのコンテンツがあって、それぞれ別のデータベースを使用 ...
-
-
PHPでもキャッシュで画像が表示されない
ここみたいにキャッシュの影響と考えられるケースが発生した。 結果的にキャッシュっ ...
-
-
PHPとStripeで定額課金(サブスクリプション)実装
PHPとStripeで1ヶ月ごとに500円でサイト内のサービスを使い放題のような ...
- PREV
- GMOのVPSでメモリ1GBのプランが出てた
- NEXT
- プロキシサーバの接続ログを確認する方法