2014-07-03 113 views
0

我有一個數組的數組,我需要做一個隨機數,然後檢查數字是否不在數組中,如果它是另一個隨機數,然後檢查該數字,看看它的數量在數組中。隨機數不是數組

示例。

array = 1, 2, 4, 5, 7 
rand(1, 7) = 3 or 6 

如果蘭特(1,7)= 1,2,4,5或7,直到它返回3或6

人知道如何在PHP做到這一點,將再次運行?

+0

我想很多本網站的用戶知道如何在PHP –

+1

這個怎麼做到這一點? http://www.php.net/manual/en/function.in-array.php – bloodyKnuckles

+0

不寫你想要的代碼: 1.生成一個隨機數 2.雖然數字存在於數組中 3。生成另一個隨機數並返回2. 4.你有你的號碼 –

回答

1

您可以簡單地生成隨機數,並檢查它是否已經陣列

$in = [1, 4, 7, 9]; 
do { 
    $rand = rand($min, $max); 
} while(in_array($rand, $in)); 

echo $rand, ' is random, but not in the input array'; 

上面的代碼生成一個隨機整數,它是在內部和$min定義$max界限英寸如果該值已經存在於數組中,則會提取一個新的隨機值並將其與輸入數組進行比較。

注意:雖然上面是最小的工作代碼,如果你輸入數組包含了所有可能的值(感謝@Action Dan)您可以創建一個無限循環。你沒有在你的問題中說明這是否可能。如果有可能,你需要解決這個問題。通過限制最大嘗試次數或驗證輸入數組,然後發出錯誤消息或增加rand的第二個參數。

例(驗證,建議僅用於小型陣列):

$in = [1,2,3,4,5]; 
$min = 1; 
$max = 5; 
if(range($min, $max) === $in) { 
    echo 'No possible value in range'; 
    exit; 
} 
// code from above 
+1

這裏唯一的建議是有一個潛在的取決於輸入,以永久循環。我建議一個迭代的計數器,如果該計數器變成(比方說)輸入數組長度的一半,則切換到簡單地找到不在數組中的最小可用數字或其他一些倒退。 –

+0

這很好。謝謝。 – user3646863

+0

感謝@ActionDan添加了一個關於該節點的節點,並在小陣列中添加了一個小節點。如果您有更好的建議,請隨時更改。 – Rangad

1
<?php 

    $numbers = array(1,2,3,4,5,6,7); 

    $rand = rand(1,10); 

    if (in_array($rand, $numbers)) 
    { 
     echo "Match found"; 
    } 
    else 
    { 
     echo "Match not found"; 
    } 
    echo "<br />" . $rand; 
?> 

在此示例中,我有$蘭特故意有超過7,只是爲了確保代碼工作很好,「比賽未找到「。

in_array()函數檢查$ rand的值是否存在於$ numbers中,如果爲true ..如果不打印」打印匹配「,則打印」匹配找到「。

希望這有助於..

+1

**歡迎來到StackOverflow ** - 答案應該提供一些背景參考和/或描述爲什麼事情工作和如何。請提供更多有關您答案的信息。 –