Довольно часто нужно сгенерировать значения без повторений для заданного набора данных. Функции rand(), mt_rand() ,random_int() здесь не подойдут, так как велик процент повторения
Например нужно выдать уникальный номер билета студенту в группе. Сделаем тестовый массив со студентами
$students = [];$c = 40;$i = 0;while ($i <= $c){$students[$i]['id'] = $i;$students[$i]['name'] = 'student '. $i;$i++;}// Диапазон номеров билетов которые мы будем раздавать$range = range(1, 25);// Добавляем в массив номер билета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]);}
Как получить уникальный значения из массива PHP
В итоге в массиве $students[key]['ticket'] мы получим уникальные номера билетов в рамках группы студентов.
Данную реализацию можно применить в различных ситуациях.
Комментарии отсутствуют