ホームページ  >  記事  >  バックエンド開発  >  PHP は範囲外の乱数をランダムに生成します

PHP は範囲外の乱数をランダムに生成します

王林
王林オリジナル
2019-09-19 11:53:592642ブラウズ

PHP は範囲外の乱数をランダムに生成します

アイデア: 生成された乱数を配列に保存し、配列内の重複する値を削除して、一定数の非反復乱数を生成します。

PHP Web サイト開発では、指定された範囲内で特定の数の非反復乱数を生成する必要がある場合がありますが、乱数を生成するこの関数を具体的に設計するにはどうすればよいでしょうか?ランダムに生成された数値を配列に格納できますが、格納中に重複する値を削除することで、一定数の非繰り返しの乱数を生成できます。

指定した範囲の値を配列に格納し、shuffle($array) を使用して配列を中断し、特定の数の値をインターセプトすることもできます。ただし、後者の方法では、指定した乱数の範囲が大きすぎる場合、より大きな配列が生成されます。

最初のアプローチのコードを以下に示します。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 ビデオ チュートリアル

以上がPHP は範囲外の乱数をランダムに生成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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