У меня есть массив объектов в PHP. Мне нужно выбрать 8 из них наугад. Моя первоначальная мысль заключалась в использовании array_rand(array_flip($my_array), 8)
но это не работает, потому что объекты не могут действовать как ключи для массива.
Я знаю, что могу использовать shuffle
, но меня беспокоит производительность, поскольку массив растет по размеру. Это лучший способ, или есть более эффективный способ?
$result = array(); foreach( array_rand($my_array, 8) as $k ) { $result[] = $my_array[$k]; }
$array = array(); shuffle($array); // randomize order of array items $newArray = array_slice($array, 0, 8);
Обратите внимание, что функция shuffle()
дает параметр в качестве ссылки и вносит изменения в него.
Вы можете использовать array_rand
для случайного выбора ключей и foreach
для сбора объектов:
$objects = array(); foreach (array_rand($my_array, 8) as $key) { $objects[] = $my_array[$key]; }
Как насчет?:
$count = count($my_array); for ($i = 0; $i < 8; $i++) { $x = rand(0, $count); $my_array[$x]; }
Я только что нашел это в нашем коде и надеялся найти более читаемое решение:
$rand = array_intersect_key($all, array_flip(array_rand($all, $count)));