Rand php без повторений

Содержимое страницы

Часто приходится сталкиваться с такими проблемами когда необходимо из массива значений получить набор или серию которые будут уникальны?

Рассмотрим задачу. Имеет 60 студентов и 30 билет. Необходимо организовать работу скрипта таким образом, что бы билеты выдавались по порядку и как только билеты заканчивались, они начинали выдаваться по новому.

php без повторений

// буферная переменная в которой мы храним активную серию билетов
$buf = array();
// Диапазон номеров билетов которые мы будем раздавать
$range = range(1, 30);
// Добавляем в массив номер билета
// для этого перебираем всех студентов
foreach ($students as $key => $val)
{
if(count($buf) == 0) // проверяем, не закончилась ли у нас серия билетов или не является ли это первой итерацией цикла
{
$buf = $range;
}
$rand_key = array_rand($buf); // получаем случайный билет из массива
$students[$key]['ticket'] = $buf[$rand_key]; // сохраняем этот билет у студентов
unset($buf[$rand_key]); // уничтожаем этот билет из буферной переменной
}

Таким образом — используя этот скрипт, можно получать любое количество случайных значений, и не беспокоится о том что они могут повториться.

Вариант с повторением возможен только в том случае если число необходимых элементов. превышает количество элементов которые у нас есть изначально.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *