Генерирование случайных чисел без повторов

Я создаю веб-сайт, который будет случайным образом отображать список визгов каждый раз, когда страница обновляется. Поиск api yelp возвращает 20 записей в массиве. Прямо сейчас я использую функцию rand (0,19) PHP для генерации случайного списка каждый раз, когда страница обновляется ($ business [rand (0,19)]).

Может ли кто-нибудь назвать меня более разумным методом рандомизации? Я хочу показать все 20 списков один раз, прежде чем кто-либо из них будет повторен. Каков предпочтительный метод решения этой проблемы?

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

$numbers = range(0, 19); shuffle($numbers); 

 // Handle Yelp response data $response = json_decode($data); $RANDOM = rand(1,19); $business = $response->businesses; echo "<img border=0 src='".$business[$RANDOM]->image_url."'><br/>"; echo $business[$RANDOM]->name."<br/>"; echo "<img border=0 src='".$business[$RANDOM]->rating_img_url_large."'><br/>"; ?> 

Простое решение:

 $numbers = range(1, 20); shuffle($numbers); 

Альтернатива:

 <?php function randomGen($min, $max, $quantity) { $numbers = range($min, $max); shuffle($numbers); return array_slice($numbers, 0, $quantity); } print_r(randomGen(0,20,20)); //generates 20 unique random numbers ?> 

Аналогичный вопрос: # 5612656

Кодепад: http://codepad.org/cBaGHxFU

Обновить:

Вы получаете все списки в массиве, называемом $businesses .

  1. Создайте случайный идентификатор списка, используя приведенный выше метод, а затем сохраните его в таблице базы данных.
  2. На каждом обновлении страницы создайте случайный идентификатор листинга и проверьте, соответствует ли оно значению в вашей базе данных. Если нет, отобразите это объявление и добавьте это значение в свою таблицу.
  3. Перейдите к шагу 1.

Когда это будет завершено, вы будете отображать все 20 списков одновременно.

Надеюсь это поможет!

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