ホームページ  >  記事  >  バックエンド開発  >  PHPで非反復乱数を生成する方法

PHPで非反復乱数を生成する方法

藏色散人
藏色散人オリジナル
2020-10-30 09:57:231989ブラウズ

php で非繰り返しの乱数を生成する方法: まず、配列内の各数値に添字の順序で値を割り当て、次に "[i, $num-" の範囲の乱数を取得し始めます。 1]"; 最後に、変更されていないキーと値のペアに対して交互の操作を実行するだけです。

PHPで非反復乱数を生成する方法

推奨: 「PHP ビデオ チュートリアル

PHP は非繰り返しの乱数を効率的に生成します

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;
}

このメソッドは毎回乱数を取得し、重複排除する前に配列に格納します。 ..

PHP を使用して n 範囲 (m

注: これについても言及されています書籍「Programming Pearls」のタイトル「n (m

このアルゴリズムは、次のような立場を取る非常に賢いものです。乱数(配列の添字)は、乱数そのものを取得するのではなく、乱数を取得するたびに値の範囲から除外され、次回は残りの数値からのみ取得されます。乱数の選択は 1 回の走査で完了できるため、非常に効率的です。

function rand_num($num=&#39;200&#39;){
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 を現在位置キー i に対応する添字として使用します。配列値 $rand 内で、配列内のキー $rand の添字に対応する値を i に置き換えます。これは実際には配列キー値の相互交換です。意味は、生成された乱数を値の範囲 [i,$num-1] から除外し、次回は残りの数値 [i 1,num-1] から値を取得することです。

3. 3 番目のステップでは、値の重複を避けるために、変更されていないキーと値のペアに対してのみ交互操作を実行します。つまり、元の配列が順番に配置されている位置 (キー) に対して交互操作を実行します。 == 値)。

4. 終了。

逐次配列部分交換処理

PHPで非反復乱数を生成する方法

上記のように、10個の乱数部分例を取得します。

以上がPHPで非反復乱数を生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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