2015-05-01 68 views
0

我有兩個不同的函數,一個從值0-51(唯一)生成5個隨機卡,一個包含包含這5個卡的數組的函數,以及一個包含一些數字的數組來自陣列#1將被存儲。PHP唯一編號不唯一

函數兩個函數二是如果值不在數組#2中,則將新值替換爲數組#1。 這裏似乎有些問題。生成一些數字後,我得到:

array(27,18,37,27,45) 

從newCards函數返回。

問題:如何修復newCards函數100%做它應該做的事情? (也可以使用第一個數組,檢查數字是否在第二個數組中,如果沒有,在這裏也是唯一的),因爲它返回了兩個相同的數字,所以出現了錯誤。

代碼:

function UniqueCards() { 
     $result = array(); 

     while(count($result) != 5) { 
      $rand = rand(0,51); // reads as 0 = 1, and 51 = 52. aka starts at zero. 

      if(!in_array($rand,$result)){ 
       $result[] = $rand; 
      } 
     } 

     return $result; 
    } 

    function newCards($input,$exclude) { 
      $i = 0; 
      $output = array(); 
      while($i < count($input)) { 
       $rand = rand(0,51); 

       if(in_array($input[$i], $exclude)) { 
        $output[$i] = $input[$i]; 
        $i++; 
       } 

       else if(!in_array($rand, $input)){ 
        $output[$i] = $rand; 
        $i++; 
       } 
      } 
      return $output; 



    } 
+1

[的範圍內生成唯一隨機數 - PHP]的可能重複(http://stackoverflow.com/questions/5612656/generating-unique-random-numbers-within-a-range-php) – bardzusny

+0

似乎你正在使用這個問題的代碼:http://stackoverflow.com/q/29938271/3933332,你看過所有其他的答案,哪裏有? – Rizier123

+0

是的。我試過了。唯一不同的是不按性能殺死功能,不完整,產生數字的方式落後於其目的等。 – maria

回答

0

如果添加檢查是否$rand已經在$output將它解決這一問題?

function newCards($input,$exclude) { 
    ... 
    else if(!in_array($rand, $input) && !in_array($rand, $output)) { 
     $output[$i] = $rand; 
     $i++; 
    } 
    ... 
} 
+0

將檢查並報告它是否不固定。這需要一些模擬才能看到。 – maria