2012-05-03 27 views
5

我有一個PHP腳本,我有一個整數數組,例如$forbidden帶條件的隨機整數

我想從1到400得到一個不在$forbidden中的隨機整數。

當然,我不想在rand給出工作結果時斷開任何循環。我想要更有效的東西。

你是如何做到這一點的?

+1

爲什麼循環無效? –

+0

@MichaelRobinson:這不是有效的,因爲$ forbidden可能非常大。 Paul:我想過讓一個數組中的所有整數都可以,然後從中得到一個樣本,但我想知道是否有更好的語言 – Cydonia7

+0

@MichaelRobinson:循環無效,因爲理論上你可能會遇到禁止的數字連續1000000次(但如果發生這種情況,你可能應該去填寫一些彩票),但是。 –

回答

10

將所有禁止的數字放在數組中,並使用從range(1,400)。你會得到一組允許的數字,隨機選擇一個與array_rand()

<?php 

$forbidden = array(2, 3, 6, 8); 
$complete = range(1,10); 
$allowed = array_diff($complete, $forbidden); 

echo $allowed[array_rand($allowed)]; 

這樣,你從選擇集中移除排除數字,並抵消了循環:)

+0

我不知道array_diff,正在尋找它一段時間!謝謝你的答案。 – Cydonia7

0

產生允許號碼的陣列的需要。找出這個數組中的數字。隨機選擇一個。