Получено от Laravel Collection::random()
:
function array_random($array, $amount = 1)
{
$keys = array_rand($array, $amount);
if ($amount == 1) {
return $array[$keys];
}
$results = [];
foreach ($keys as $key) {
$results[] = $array[$key];
}
return $results;
}
Использование:
$items = ['foo', 'bar', 'baz', 'lorem'=>'ipsum'];
array_random($items); // 'bar'
array_random($items, 2); // ['foo', 'ipsum']
Несколько заметок:
$amount
должно быть меньше или равно count($array)
.
array_rand()
не тасует ключи (начиная с PHP 5.2.10, см. 48224 ), поэтому выбранные вами предметы всегда будут в исходном порядке. При необходимости используйте shuffle()
.
Документация: array_rand()
, shuffle()
edit: С тех пор заметно возросла функция Laravel, см. Laravel 5.4 Arr::random()
. Вот что-то более сложное, полученное из взрослой функции Laravel:
function array_random($array, $number = null)
{
$requested = ($number === null) ? 1 : $number;
$count = count($array);
if ($requested > $count) {
throw new \RangeException(
"You requested {$requested} items, but there are only {$count} items available."
);
}
if ($number === null) {
return $array[array_rand($array)];
}
if ((int) $number === 0) {
return [];
}
$keys = (array) array_rand($array, $number);
$results = [];
foreach ($keys as $key) {
$results[] = $array[$key];
}
return $results;
}
Несколько основных моментов:
- Бросьте исключение, если недостаточно доступных предметов
array_random($array, 1)
возвращает массив из одного элемента ( # 19826 )
- Значение поддержки "0" для количества элементов ( # 20439 )