2010-09-03 95 views
4

我有一個PHP中的對象數組。我需要隨機選擇其中的8個。我最初的想法是使用array_rand(array_flip($my_array), 8)但這不起作用,因爲對象不能作爲數組的鍵。如何從PHP中的數組中選擇隨機值?

我知道我可以使用shuffle,但是我擔心隨着陣列規模的增長性能。這是最好的方式,還是有更高效的方法?

+0

這8個必須是唯一的? – kennytm 2010-09-03 19:58:05

+0

是的,它們必須是唯一的。 – 2010-09-03 20:00:47

回答

8
$result = array(); 
foreach(array_rand($my_array, 8) as $k) { 
    $result[] = $my_array[$k]; 
} 
2

你可以使用array_rand挑鍵隨機和foreach收集的對象:

$objects = array(); 
foreach (array_rand($my_array, 8) as $key) { 
    $objects[] = $my_array[$key]; 
} 
+0

因爲它返回數組鍵,而不是值? – 2010-09-03 20:00:13

+1

@Chris,這就是爲什麼你使用'$ my_array [$ key]'。 – eyelidlessness 2010-09-03 20:02:04

+0

@克里斯B .:我重新回答了我的答案。 :) – Gumbo 2010-09-03 20:02:07

0

怎麼樣?:

$count = count($my_array); 
for ($i = 0; $i < 8; $i++) { 
    $x = rand(0, $count); 
    $my_array[$x]; 
}
+0

這不適用於關聯數組 – tamasd 2010-09-03 20:02:12

5
$array = array(); 
shuffle($array); // randomize order of array items 
$newArray = array_slice($array, 0, 8); 

注意shuffle()函數給出參數作爲參考並對其進行更改。

+1

無循環。這是一個美麗的解決方案。 – Chords 2013-10-23 14:46:07

+1

@Chords你可以打賭'shuffle'和'array_slice'包含一些循環。 :) – 2014-02-21 02:08:16

+0

謝謝,但至少我不必看它! – Chords 2014-02-21 02:14:36

0

我剛剛發現這個在我們的代碼,並希望能找到一個更可讀的解決方案:

$rand = array_intersect_key($all, array_flip(array_rand($all, $count)));