ホームページ  >  記事  >  バックエンド開発  >  PHPで一意の数値を生成する方法

PHPで一意の数値を生成する方法

藏色散人
藏色散人オリジナル
2020-07-27 09:08:473316ブラウズ

php で一意の数値を生成するメソッド: まず変数を 0 に初期化し、次に新しい配列を作成し、特定の範囲内の数値をランダムに生成して配列に入れます。その後、配列内の重複する値を削除します。 ; 最後に 変数 count に配列の番号を格納し、配列に新しいキー名を付けるだけです。

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 個の重複しない数値を効率的に生成する 乱数 (m

注: これは、書籍「Programming Pearls」にも記載されており、「m 個の非重複数値を効率的に生成する方法」と題されています。 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 番目のステップでは、値の繰り返しを避けるために、変更されていないキーと値のペアに対してのみ交互操作を実行します。つまり、元の配列が順番に配置されている位置に対して交互操作を実行します (key = = 値)。

4.終了。

逐次配列部分交換処理

PHPで一意の数値を生成する方法

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

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

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