ホームページ  >  記事  >  バックエンド開発  >  非反復乱数の PHP 表現を生成します。

非反復乱数の PHP 表現を生成します。

巴扎黑
巴扎黑オリジナル
2016-11-12 10:52:13906ブラウズ

前提:

今日ある投稿を見て、誰かが配列を生成したいと考えているのを見ました。この配列には 10 個の要素があり、そのすべては 1 ~ 60 の整数であり、繰り返しのない乱数です​​。

もちろん、この質問は難しいものではありません! 以下はフォーラムの返信からの回答です。

コード:

Phpコード

<?php   
          function get_randoms($min,$max,$num){  
                 $count = 0;  
                 $res = array();  
                 while($count<$num){  
                        $res[] = mt_random($min,$max);  
                        $res = array_flip(array_flip($res));   
                        $count = count($res);  
                  }  
                  return $res;  
           }  
             
            $result = get_randoms(1,60,10);  
?>



ここでは、$countを使用して結果配列の数を取得し、whileループで結果配列の数をターゲット数よりも少なくしています。これにより、ターゲット番号の配列である $count が得られます。
各サイクル中、mt_random($min,$max) を通じて範囲内の値がランダムに取得され、配列 $res に格納されます。その後、2 つのキーと値の交換、つまり配列キーの一意性を通じて、値が取得されます。 , 重複がないようにします。

このロジックのコードを読んだ後、array_filp 関数を知らなかったらどうするか深く考えずにはいられませんでした。
端的に言えば、乱数が重複しないように鍵の一意性を利用しています。では、この問題を単純化することはできるでしょうか?

コード:

Phpコード

<?php   
         function get_randoms($min,$max,$num){  
                $count = 0;  
                $res = array();  
                while($count<$num){  
                       $key = mt_random($min,$max);  
                       $res[$key] = $key;  
                       $count = count($res);  
                 }  
                 return $res;  
          }  
            
           $result = get_randoms(1,60,10);  
 ?>



このようにして、配列キーの一意性によってこの問題を完全に解決しました。 Array_flip はまったく使用されません。

以上を通して、私は2つの点を主張しました。

1: PHP には多数の組み込み関数が用意されているため、実行効率が非常に高くなります。 問題に遭遇したとき、私たちは問題を解決するために全力を尽くします。これは便利で速いです。 そのため、私たちは日々の業務の中で仕事や勉強をし、PHPの機能をできるだけ多く蓄積し、深く理解しています。

2: PHP は多数の組み込み関数を提供しており、実行効率も非常に高いですが、効率は高いものの、実行にはまだ時間がかかることを指摘しておきます。問題に遭遇したときは、やみくもに解決するのではなく、まず解決策の本質を見極め、それをうまく実行していきます。


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