php メソッドで非反復乱数を実装します。まず変数を 0 に初期化し、次に新しい配列を作成します。次に、特定の範囲内の数値をランダムに生成して配列に入れ、重複する値を削除します。配列内; 最後に、配列に新しいキー名を付けるだけです。
推奨: 「PHP ビデオ チュートリアル 」
/* * array unique_rand( int $min, int $max, int $num ) * 生成一定数量的不重复随机数 * $min 和 $max: 指定随机数的范围 * $num: 指定生成数量 */ function unique_rand($min, $max, $num) { //初始化变量为0 $count = 0; //建一个新数组 $return = array(); while ($count < $num) { //在一定范围内随机生成一个数放入数组中 $return[] = mt_rand($min, $max); //去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。 $return = array_flip(array_flip($return)); //将数组的数量存入变量count中 $count = count($return); } //为数组赋予新的键名 shuffle($return); return $return; }
この方法は、毎回乱数を取得し、重複排除する前に配列に格納します...非効率です...使いたくないです
注: これは、書籍 「Programming Pearls」# にも記載されています。 ##、タイトル 「n (m<=n) の範囲で m 個の非繰り返し乱数を効率的に生成する方法」
このアルゴリズムは、次の点を考慮する点で非常に賢いです。乱数そのものを取得するのではなく、乱数の位置 (配列の添え字 <span style="color:#ff6820; background-color:rgb(252,245,239)"></span>
) 乱数が取得されるたびに、次のようになります。数値から選択することで、乱数の選択が一度で完了するので効率的です。
function rand_num($num='200'){ for($i=0;$i<$num;$i++){ $n[$i] = $i; } for($i=0;$i<$num;$i++){ $rand = mt_rand($i,$num-1); //数组 随机数交换下标 if($n[$i] == $i){ $n[$i] = $n[$rand]; $n[$rand] = $i; } } }
1. 最初のステップは、各数値 に下付き文字 の順に値を代入し、$num 数値を取得することです。 . キー値は、 の順序で配置された配列に対応します。
2. 2 番目の ステップ では、範囲 [i, $num-1] の乱数 $rand の取得を開始し、取得した乱数を使用します$rand は、配列 $rand の現在位置の 添字に対応する キー i の値として使用されます。配列内の キー 添字に対応する $rand の値は、実際には である i に置き換えられます。 配列キー値の相互交換。意味は、生成された乱数 を値の範囲 [ i,$num-1] から除外し、次回は残りの数値 [ i 1,num-1 ]。 3. 3 番目の ステップ では、値の繰り返しを避けるために、変更されていないキーと値のペアに対して交互の操作のみを実行します。つまり、それらを元の配列に順番に配置します。 (key == value) 位置を交互に操作します。 4.終わり。 配列を順番に並べる部分交換処理 上に示したように、10 個の乱数部分テスト例を取得します。
以上がPHPで非反復乱数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。