2010-05-25 152 views
0

我試圖得到一個隨機陣列這樣PHP隨機陣列

srand((float) microtime() * 10000000); 
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); 
$rand_keys = array_rand($input, 2); 
echo $input[$rand_keys[0]] . "\n"; 
echo $input[$rand_keys[1]] . "\n"; 

它顯示了2號隨機,如果我有$rand_keys = array_rand($input, 2);$rand_keys = array_rand($input, 5);但因爲我希望所有5表明它不工作。什麼導致了這一點。我需要使用array_rand。謝謝

回答

2

array_rand按照它們在原始數組中存在的相同順序排序鍵。如果你想要一個洗牌陣列,使用shuffle功能第一:

$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); 
shuffle($input); 
$rand_keys = array_rand($input, 5); 
for ($i = 0; $i < count($rand_keys); $i++) { 
    echo $input[$rand_keys[$i]] . "\n"; 
} 

當然,在這裏您可以訪問所有五個的情況下,沒有必要打電話給array_rand可言,但如果你改變它的第二個參數,這仍然有效。

另外,調用srand函數是不必要的 - 從PHP 4.2開始爲你完成。

+0

請仔細閱讀以上內容。我不想使用洗牌或我不會問問題 – Autolycus 2010-05-25 03:46:17

+0

@ user295189:你爲什麼不想使用'shuffle'? – 2010-05-25 13:29:59

0

的changelog此功能:

5.2.10 The resulting array of keys is no longer shuffled. 

此功能不會以隨機順序返回元素,它返回隨機元素。 所以,如果你想從你的數組中獲得5個隨機元素,它只會讓你獲得所有元素。

0

我假設你不想在原始數組上使用shuffle,因爲它重新排列了鍵?如果是這樣,那麼只需使用隨機密鑰對數組進行隨機洗牌,保持輸入數組不變。

$rand_keys = array_rand($input, 5); 
shuffle($rand_keys); 
print_r($rand_keys); 
/** 
* Sample output 
Array 
(
    [0] => 0 
    [1] => 1 
    [2] => 4 
    [3] => 2 
    [4] => 3 
) 
*/