我有一個PHP中的對象數組。我需要隨機選擇其中的8個。我最初的想法是使用array_rand(array_flip($my_array), 8)
但這不起作用,因爲對象不能作爲數組的鍵。如何從PHP中的數組中選擇隨機值?
我知道我可以使用shuffle
,但是我擔心隨着陣列規模的增長性能。這是最好的方式,還是有更高效的方法?
我有一個PHP中的對象數組。我需要隨機選擇其中的8個。我最初的想法是使用array_rand(array_flip($my_array), 8)
但這不起作用,因爲對象不能作爲數組的鍵。如何從PHP中的數組中選擇隨機值?
我知道我可以使用shuffle
,但是我擔心隨着陣列規模的增長性能。這是最好的方式,還是有更高效的方法?
$result = array();
foreach(array_rand($my_array, 8) as $k) {
$result[] = $my_array[$k];
}
你可以使用array_rand
挑鍵隨機和foreach
收集的對象:
$objects = array();
foreach (array_rand($my_array, 8) as $key) {
$objects[] = $my_array[$key];
}
因爲它返回數組鍵,而不是值? – 2010-09-03 20:00:13
@Chris,這就是爲什麼你使用'$ my_array [$ key]'。 – eyelidlessness 2010-09-03 20:02:04
@克里斯B .:我重新回答了我的答案。 :) – Gumbo 2010-09-03 20:02:07
怎麼樣?:
$count = count($my_array);
for ($i = 0; $i < 8; $i++) {
$x = rand(0, $count);
$my_array[$x];
}
這不適用於關聯數組 – tamasd 2010-09-03 20:02:12
$array = array();
shuffle($array); // randomize order of array items
$newArray = array_slice($array, 0, 8);
注意shuffle()
函數給出參數作爲參考並對其進行更改。
我剛剛發現這個在我們的代碼,並希望能找到一個更可讀的解決方案:
$rand = array_intersect_key($all, array_flip(array_rand($all, $count)));
這8個必須是唯一的? – kennytm 2010-09-03 19:58:05
是的,它們必須是唯一的。 – 2010-09-03 20:00:47