ホームページ  >  記事  >  バックエンド開発  >  !乱数をより速く生成する方法

!乱数をより速く生成する方法

WBOY
WBOYオリジナル
2016-06-13 12:08:391198ブラウズ

ヘルプ!乱数をより速く生成する方法!
要件は次のとおりです。
会員が購入すると、注文番号が生成されます。この注文番号は、1 ~ 100,000 などの一定の範囲内のデータである必要があります。

私が現在使用している方法は、rand(1,100000) を使用して乱数を生成することです。乱数を取得した後、その数値が既に存在する場合は、それをループします。もう一度確認してください。
コードは次のとおりです。

<br />         set_time_limit(0);<br />		$test = M('test');<br />		$_run = true;<br />		$_order_id = rand(0, 100000);<br />		while ($_run) {<br />			$orderInfo = $test->where("val = ".$_order_id)->find();<br />			if(empty($orderInfo)){<br />				$_run = false;<br />				return $_order_id;<br />			}else{<br />				$_order_id = rand(0, 100000);<br />			}<br />		}<br />


これを実行した後、注文番号がまだ非常に小さい場合は、注文番号を取得するのは簡単ですが、注文番号が達した場合は、 99990
現時点では、他の注文番号の生成に時間がかかり、数分から 1 時間かかる場合があります。

このアプローチはもう機能しません。

解決策を見つけるか、他のアイデアを提供するのを手伝ってください、ありがとう!
------解決策----------------------
擬似乱数生成器を書くことができます自分自身
ツールは最初に
$m = 100000;<br />$c = 101;<br />$b = 81;<br />$n = 0;<br />for($i=0; $i<100000; $i++) {<br />  $n = ($n * $c + $b) % $m;<br />  $r[] = $n;<br />}<br />print_r(array_count_values(array_count_values($r)));<br />
Array<br />(<br />    [1] => 100000<br />)<br />
を観察します。$r には 0 から 99999 までのランダムに配置された数値が含まれており、各数値は 1 回だけ表示されることがわかります。

$n を最後にしますデータベースに入力された数値です。 then ($n * $c $b) % $m はライブラリに存在してはなりません

ご理解いただけると幸いです

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