首頁  >  文章  >  後端開發  >  產生不重複隨機數的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中,然後透過兩次key-value 交換,也就是透過數組key的唯一性,使得做到不重複。 

我看了這個邏輯的程式碼之後,我不禁陷入了深思,假如說當你不知道array_filp 函數的時候你怎麼做? 
說白了就是用key的唯一性,使得隨機數不會有重複。那我們能不能將這個問題簡化處理呢? 

程式碼: 

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);  
 ?>



這樣以來,我們完全是單獨的透過陣列key的唯一性  解決了這個問題。根本就不會用到array_flip。 

透過上述,我提出兩個觀點。 

     一:因為php為我們提供了大量的內建函數,他們的執行效率都很高。 我們在遇到問題的時候,盡可能 的去用它去解決問題。這樣方便又快速。 所以,我們日常工作學習,盡可能的累積足夠的php函數,並且深刻的理解它們。 

    二:  雖然php 給我們提供了大量的內建函數,執行效率也很高,但是,我想指出,雖然效率高,還是需要時間去執行的。我們在遇到問題的時候,不要盲目的去做,可以先看清處理方法的本質,以便於我們去巧妙的實現他。 


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn