2010-02-24 82 views
12

從數組PHP得到兩個不同的隨機數組元素

$my_array = array('a','b','c','d','e'); 

我希望得到兩個不同的隨機元素。

用下面的代碼:

for ($i=0; $i<2; $i++) { 
    $random = array_rand($my_array); # one random array element number 
    $get_it = $my_array[$random]; # get the letter from the array 
    echo $get_it; 
} 

有可能得到相同的字母兩次。我需要防止這一點。我想總是得到兩個不同的數組元素。有人可以告訴我該怎麼做嗎? 謝謝

回答

6

你可以隨時刪除你第一次選擇的元素,然後你不會再選擇它。如果你不想修改數組創建一個副本。

for ($i=0; $i<2; $i++) { 
    $random = array_rand($my_array); # one random array element number 
    $get_it = $my_array[$random]; # get the letter from the array 
    echo $get_it; 

    unset($my_array[$random]); 
} 
+0

聽起來不錯。我怎樣才能刪除數組元素? – creativz 2010-02-24 15:53:32

+0

'unset($ array [$ key])' – Franz 2010-02-24 15:54:21

+0

'unset($ my_array [$ random]);' – thetaiko 2010-02-24 15:54:23

9

這是怎麼回事?

$random = $my_array; // make a copy of the array 
shuffle($random); // randomize the order 
echo array_pop($random); // take the last element and remove it 
echo array_pop($random); // s.a. 
+0

+1更優雅 – Franz 2010-02-24 15:55:26

+1

對於非常大的數組,這可能非常慢,但是因爲您當然不必爲了得到兩個元素而洗牌整個數組。 – Joey 2010-02-24 15:56:27

+0

這不是規範的一部分;)。 – middus 2010-02-24 16:04:13

-1

獲得第一隨機,然後使用do..while循環以獲得第二:

$random1 = array_rand($my_array); 
do { 
    $random2 = array_rand($my_array); 
} while($random1 == $random2); 

這將繼續循環,直到random2是不一樣的random1

+0

如果2個元素相同,這將不起作用 – pheelicks 2010-02-24 15:58:42

+0

@pheelicks它應該工作,因爲array_rand返回索引而不是元素本身。 – middus 2010-02-24 16:25:54

+0

D'oh。對不起adam – pheelicks 2010-02-24 16:45:27

17

array_rand()能需要兩個參數,數組和要選擇的(不同)元素的數量。

混合array_rand(數組$輸入[摘要$ num_req = 1])
$my_array = array('a','b','c','d','e'); 
foreach(array_rand($my_array, 2) as $key) { 
    echo $my_array[$key]; 
} 
+0

我喜歡這一款。但是,根據對php.net的評論,返回索引的順序並不是隨機的。 +1無論如何;) – middus 2010-02-24 16:02:37

+0

@middus:這仍然是真實的最新版本的PHP?有一些關於一些隨機功能的投訴,尤其是,在win32上。我認爲他們已經(有點)修復了。 – VolkerK 2010-02-24 16:07:28

+0

我其實不知道。我沒有自己測試過。 – middus 2010-02-24 16:28:03

2
foreach (array_intersect_key($arr, array_flip(array_rand($arr, 2))) as $k => $v) { 
    echo "$k:$v\n"; 
} 

//or 

list($a, $b) = array_values(array_intersect_key($arr, array_flip(array_rand($arr, 2)))); 
1

這裏是一個簡單的函數I用於從陣列拉動多個隨機元素。

function get_random_elements($array, $limit=0){ 

    shuffle($array); 

    if ($limit > 0) { 
     $array = array_splice($array, 0, $limit); 
    } 

    return $array; 
} 
0

下面是我做到的。希望這可以幫助任何人困惑。

$originalArray = array('first', 'second', 'third', 'fourth'); 
$newArray= $originalArray; 
shuffle($newArray); 
for ($i=0; $i<2; $i++) { 
    echo $newArray[$i]; 
}