ホームページ >バックエンド開発 >PHPチュートリアル >PHP で同時実行性の高い宝くじプログラムを探していますが、繰り返し当選したり、複数の人が同じ賞品を獲得したりする場合にどう対処すればよいでしょうか?
PHP で同時実行性の高い宝くじプログラムをお探しですか?
私の考え方は、例えば、1等:1、2等:2、3等:3なので、賞品の数は6です。100人が同時に抽選に参加した場合、空の賞品は100です。 -6= 94 項目。
まず、引き換え番号としてデータベース mysql から 6 つの特典の一意の番号をクエリします。
sql1:
$sql="ステータス=0のテーブルから一意の番号を選択";
配列を取得 $real=array('001','002','003','004','005','006',); ここで、001,002 は一意の番号です
次に、空の賞品を 94 個生成します
$empty=array('','',...,'',);
最後に、配列を結合して新しい配列を取得します。
$arr = array_merge($real, $empty);
ユーザーは配列から項目をランダムに選択します
$rand= mt_rand(0, count($arr)-1);
たとえば、$rand は 001
を描画しました
if(''!=$rand){
//データのステータスの取得と変更を示します。ここではデータベースを操作する必要があります
sql2:
$sql="更新テーブルセットステータス=1、一意の番号=001";
作戦完了
}その他{
//結果がなく、操作が実行されないことを示します。
}
ここで問題となるのは、100 人が同時に抽選に参加した場合、赤い部分の sql2 で、緊急変更ステータスがまだ到来していないとき、sql1 は引き続き 001 を未抽選の賞品とみなし、他のユーザーが引き続き抽選できるようにすることです。引き分けたので、001 が再び引き分けられた可能性があります。
PHP で同時実行性の高い宝くじプログラムを作成するのに協力していただきたいのですが、当選が繰り返されたり、複数の人が同じ賞を獲得したりすることを回避するにはどうすればよいですか?
あるいは別のアイデアから抽選手順を検討してみましょう。