Array rand: примеры (PHP)
array_rand(array $array, int $num = 1): int|string|arrayФункция array_rand() используется для получения случайного набора ключей из массива. Основное применение связано с необходимостью случайного выбора одного или нескольких элементов из коллекции данных. Функция становится полезной в задачах, связанных с генерацией случайных рекомендаций, выбором случайного теста или просто перемешиванием данных.
Синтаксис функции: array_rand(array $array, int $num = 1): int|string|array
- $array (обязательный). Входной массив, из которого происходит выборка ключей.
- $num (опциональный). Количество случайно выбираемых ключей. По умолчанию равен 1. Если указано значение больше 1, функция возвращает массив со случайными ключами. Если значение равно 1 или не указано, возвращается один ключ (скалярное значение).
Функция использует встроенный генератор псевдослучайных чисел, который можно инициализировать с помощью srand() или mt_srand() для получения воспроизводимых результатов.
При указании одного аргумента функция возвращает случайный ключ.
$fruits = ['apple' => 'яблоко', 'orange' => 'апельсин', 'banana' => 'банан'];
$randomKey = array_rand($fruits);
echo $randomKey;orange
$colors = ['красный', 'зеленый', 'синий', 'желтый', 'черный'];
$randomKeys = array_rand($colors, 2);
print_r($randomKeys);Array
(
[0] => 1
[1] => 3
)$data = ['a' => 100, 'b' => 200, 'c' => 300, 'd' => 400];
$keys = array_rand($data, 2);
$selected = [];
foreach ($keys as $key) {
$selected[$key] = $data[$key];
}
print_r($selected);Array
(
[a] => 100
[c] => 300
)- shuffle(). Перемешивает значения массива, теряя ключи. Используется, когда важен случайный порядок всех элементов, а не выборка.
- mt_rand() / rand(). Генерируют случайные числа. Применяются для получения случайного числового индекса, но требуют знания границ массива (
mt_rand(0, count($array)-1)). - random_int(). Генерирует криптографически безопасные случайные целые числа. Подходит для выбора случайного индекса, когда важна безопасность.
Функцию array_rand() предпочтительнее использовать для простого выбора случайных ключей из ассоциативных или индексированных массивов без необходимости их перемешивания. shuffle() лучше подходит для полного перемешивания значений, особенно если сохранение ключей не требуется.
$smallArray = ['one', 'two'];
// Запрос 3 ключей из массива с 2 элементами
$keys = @array_rand($smallArray, 3);
var_dump($keys);NULL
Функция вернет NULL и вызовет ошибку уровня E_WARNING, если второй аргумент превышает количество элементов в массиве.
$items = ['a' => 'Alpha', 'b' => 'Beta'];
$key = array_rand($items);
// Ожидание значения, но получение ключа
echo "Случайный элемент: $key";Случайный элемент: a
Для получения значения необходимо использовать ключ: echo $items[$key];.
$array = [10, 20, 30];
$result = array_rand($array);
// count() вызовет ошибку, если $result - не массив
if (count($result) > 1) {
echo 'Много элементов';
}При $num=1 функция возвращает скаляр, а не массив.
- PHP 7.1: Функция начала использовать внутренний алгоритм генерации случайных чисел, который является криптографически безопасным (
random_int()вместоrand()). - PHP 8.0: Изменен способ обработки недопустимых параметров. Вместо предупреждения (E_WARNING) теперь выбрасывается исключение
ValueError, если второй параметр превышает количество элементов или меньше 1.
// PHP 8.0 и выше
$arr = [1, 2];
try {
$keys = array_rand($arr, 3);
} catch (ValueError $e) {
echo 'Ошибка: ' . $e->getMessage();
}Ошибка: array_rand(): Argument #2 ($num) must be between 1 and the number of elements in argument #1 ($array)
$users = [
'id1' => ['name' => 'Анна', 'score' => 85],
'id2' => ['name' => 'Иван', 'score' => 92],
'id3' => ['name' => 'Мария', 'score' => 78],
'id4' => ['name' => 'Петр', 'score' => 95],
'id5' => ['name' => 'Ольга', 'score' => 88]
];
// Выбор 3 случайных пользователей для A/B теста
$testGroupKeys = array_rand($users, 3);
$testGroup = array_intersect_key($users, array_flip((array)$testGroupKeys));
print_r($testGroup);Array
(
[id2] => Array
(
[name] => Иван
[score] => 92
)
[id4] => Array
(
[name] => Петр
[score] => 95
)
[id5] => Array
(
[name] => Ольга
[score] => 88
)
)$matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]
];
// Выбор случайной строки (подмассива)
$randomRowKey = array_rand($matrix);
$randomRow = $matrix[$randomRowKey];
print_r($randomRow);Array
(
[0] => 10
[1] => 11
[2] => 12
)$items = range('A', 'Z');
$selectedIndices = [];
$needed = 5;
while (count($selectedIndices) < $needed) {
$available = array_diff(array_keys($items), $selectedIndices);
$randomIndex = array_rand(array_flip($available));
$selectedIndices[] = $randomIndex;
}
$result = array_intersect_key($items, array_flip($selectedIndices));
print_r($result);Array
(
[13] => N
[2] => C
[19] => T
[8] => I
[24] => Y
)Array rand в Python
Модуль random предоставляет функции choice() и sample().
import random
fruits = ['apple', 'orange', 'banana']
# Один элемент
print(random.choice(fruits))
# Несколько уникальных элементов
print(random.sample(fruits, 2))orange ['banana', 'apple']
Array rand в Javascript
В JS нет встроенной функции, но её легко реализовать.
const colors = ['red', 'green', 'blue'];
// Один элемент
const randomIndex = Math.floor(Math.random() * colors.length);
console.log(colors[randomIndex]);
// Несколько уникальных элементов (упрощенный вариант)
function getRandomElements(arr, num) {
const shuffled = [...arr].sort(() => 0.5 - Math.random());
return shuffled.slice(0, num);
}
console.log(getRandomElements(colors, 2));green ['blue', 'red']
Array rand в MySQL
Для случайной выборки строк используется ORDER BY RAND().
SELECT * FROM products ORDER BY RAND() LIMIT 3;В отличие от PHP, MySQL перемешивает весь набор данных, что может быть медленно на больших таблицах.