要件は以下のとおりです。
会員が購入すると注文番号が生成されます。この注文番号は、1 ~ 100,000 などの一定の範囲内のデータである必要があります。
私が現在使用している方法は、rand(1,100000) を使用して乱数を生成し、乱数を取得した後、その数値が既に存在する場合は、ループで再度確認します。
コードは次のとおりです:
rrree
これを実行した後、注文番号がまだ非常に小さい場合は、注文番号を取得するのは簡単ですが、注文番号が 99990 に達している場合は、この時点で次のことが必要です。他の注文番号を生成するには、数分から 1 時間ほどかかる場合があります。
このアプローチはもう機能しません。
解決策を見つけるか、他のアイデアを提供するのを手伝ってください、ありがとう!
set_time_limit(0); $test = M('test'); $_run = true; $_order_id = rand(0, 100000); while ($_run) { $orderInfo = $test->where("val = ".$_order_id)->find(); if(empty($orderInfo)){ $_run = false; return $_order_id; }else{ $_order_id = rand(0, 100000); } }
$_order_id = date('YmdHis') . rand(100000,999999);//这样的订单号应该不会有重复的,又方便,前面还能看出时间来
$_order_id = date('YmdHis') . rand(100000,999999);//这样的订单号应该不会有重复的,又方便,前面还能看出时间来
$_order_id = date('YmdHis') . rand(100000,999999);//这样的订单号应该不会有重复的,又方便,前面还能看出时间来
まず、
$_order_id = date('YmdHis') . rand(100000,999999);//这样的订单号应该不会有重复的,又方便,前面还能看出时间来
$m = 100000;$c = 101;$b = 81;$n = 0;for($i=0; $i<100000; $i++) { $n = ($n * $c + $b) % $m; $r[] = $n;}print_r(array_count_values(array_count_values($r)));
最初に未使用の注文番号の合計数をクエリし、次に最大の乱数をそれに設定します。必要なだけ制限できます
スペースが十分でない場合は、メンバー ID + タイムスタンプを追加するだけです十分な乱数。それは決して繰り返されません
疑似乱数生成器は自分で書くことができます
まず
Array( [1] => 100000)
$m = 100000;$c = 101;$b = 81;$n = 0;for($i=0; $i<100000; $i++) { $n = ($n * $c + $b) % $m; $r[] = $n;}print_r(array_count_values(array_count_values($r)));
Array( [1] => 100000)
array_count_values(array_count_values($ In r)),
array_count_values($r) は配列を取得し、各値の出現回数を $r に保存し
再度カウントします
Array
(
[ 1] => 100000
)
これらの 100,000 個の数字は繰り返されません