ホームページ >バックエンド開発 >PHPの問題 >PHPでrandを使用して非反復乱数を生成する方法

PHPでrandを使用して非反復乱数を生成する方法

coldplay.xixi
coldplay.xixiオリジナル
2020-10-07 15:40:573148ブラウズ

php は rand を使用して非反復乱数を生成します。まず配列内の各数値に添え字の順に値を割り当てます。次に、[i, $num-1] の範囲の乱数を取得し始めます。 $ rand] を実行し、取得した乱数 [$rand] を配列内の現在位置として使用し、最後に、変更されていないキーと値のペアに対して交互の操作を実行します。

PHPでrandを使用して非反復乱数を生成する方法

php は rand を使用して非反復乱数を生成します:

/*
* 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

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

の m 個の非繰り返し乱数を効率的に生成したくありません。 1. 最初のステップは、配列内の各数値に添字の順序で値を割り当て、対応する順序で配置された $num 個の数値キー値の配列を取得することです。

2. 2 番目のステップでは、範囲 [i, $num-1] の乱数 $rand の取得を開始し、取得した乱数 $rand を現在位置キー i に対応する添字として使用します。配列値 $rand 内で、配列内のキー $rand の添字に対応する値を i に置き換えます。これは実際には配列キー値の相互交換です。意味は、生成された乱数を値の範囲 [i,$num-1] から除外し、次回は残りの数値 [i 1,num-1] から値を取得することです。

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

4. 終了。

PHPでrandを使用して非反復乱数を生成する方法

関連する無料学習の推奨事項:
php プログラミング

(ビデオ)

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

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