ホームページ  >  記事  >  バックエンド開発  >  PHPで指定された範囲内でN個の一意の乱数を生成するにはどうすればよいですか?

PHPで指定された範囲内でN個の一意の乱数を生成するにはどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-18 09:27:502198ブラウズ

指定された範囲内で N 個の非反復乱数を生成する PHP メソッド: 最初に指定された範囲内の値を配列に格納し、次に [shuffle($array)] を使用して配列を中断します; そして最後に、特定の数の値をインターセプトするだけです。

PHPで指定された範囲内でN個の一意の乱数を生成するにはどうすればよいですか?

指定された範囲内で N 個の非反復乱数を生成する PHP メソッド:

アイデア: 保存することによって生成乱数を配列に入力し、配列から重複する値を削除すると、一定数の非反復乱数を生成できます。

PHP Web サイト開発では、指定された範囲内で一定数の非繰り返しの乱数を生成する必要がある場合がありますが、乱数を生成するこの関数を具体的に設計するにはどうすればよいでしょうか?ランダムに生成された数値を配列に格納できますが、格納中に重複する値を削除することで、一定数の非繰り返しの乱数を生成できます。もちろん、指定された範囲内の値を配列に格納し、shuffle($array) を使用して配列を中断し、特定の数の値をインターセプトすることもできます。ただし、後者の方法では、指定した乱数の範囲が大きすぎる場合、より大きな配列が生成されます。

関連する学習の推奨事項: PHP プログラミングの入門から熟練度まで

最初のアプローチのコードを以下に示します。2 番目のアプローチはより簡単です。ほとんど同じなので、試してみてください。

<?php
/*
* array unique_rand( int $min, int $max, int $num )
* 生成一定数量的不重复随机数,指定的范围内整数的数量必须
* 比要生成的随机数数量大
* $min 和 $max: 指定随机数的范围
* $num: 指定生成数量
*/
function unique_rand($min, $max, $num) {
  $count = 0;
  $return = array();
  while ($count < $num) {
    $return[] = mt_rand($min, $max);
    $return = array_flip(array_flip($return));
    $count = count($return);
  }
  //打乱数组,重新赋予数组新的下标
  shuffle($return);
  return $return;
}
//生成10个1到100范围内的不重复随机数
$arr = unique_rand(1, 100, 10);
echo implode($arr, ",");
?>

プログラムは次のように実行されます:

48,5,19,36,63,72,82,77,46, 16

補足:

1. 乱数を生成するときは、mt_rand() 関数を使用しました。この関数による乱数生成の平均速度は、rand() よりも数倍高速です。

2. 配列から重複した値を削除する場合は、array_flip()を使って配列のキーと値を2回交換する「フリップ方式」が使用されます。このアプローチは、配列から重複する値を削除しながら、array_unique() を使用するよりもはるかに高速です。

3. 配列を返す前に、まず shuffle() を使用して新しいキー名を配列に割り当て、キー名が 0 ~ n の連続番号であることを確認します。この手順を実行しないと、重複する値を削除するときにキー名が不連続になる可能性があります。for を使用してトラバースする場合は問題が発生します。ただし、foreach を使用する場合やトラバースする必要がない場合は、問題は発生しません。シャッフルが必要です。

概要

以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に何らかの参考や学習価値を持っていただければ幸いです。ありがとうございました。スクリプトのレビューについては、ホーム サポートをご覧ください。関連コンテンツをさらに知りたい場合は、以下の関連リンクをご確認ください。

以上がPHPで指定された範囲内でN個の一意の乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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