Я создаю веб-сайт, который будет случайным образом отображать список визгов каждый раз, когда страница обновляется. Поиск 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
.
Когда это будет завершено, вы будете отображать все 20 списков одновременно.
Надеюсь это поможет!
Я бы сохранил запись идентификаторов, которые были отображены в массиве, и убедитесь, что массив не содержит этот идентификатор перед отображением списка.