生成随机数而不重复

rya*_*ank 13 php random api algorithm

我正在构建一个网站,每次刷新页面时都会随机显示一个yelp列表.yelp搜索api返回数组中的20个列表.现在,我正在使用PHP的函数rand(0,19)在每次刷新页面时生成一个随机列表($ businesses [rand(0,19)]).

有人可以让我使用更智能的方法进行随机化吗?我想在重复之前显示所有20个列表.处理此问题的首选方法是什么?

以下答案不起作用,因为每次刷新页面时都会重新创建数字.我猜我需要存储我已使用过的数字?

$numbers = range(0, 19);

shuffle($numbers);
Run Code Online (Sandbox Code Playgroud)
// 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/>";

?>
Run Code Online (Sandbox Code Playgroud)

Ama*_*ali 35

最简单的解决方案

$numbers = range(1, 20);
shuffle($numbers);
Run Code Online (Sandbox Code Playgroud)

替代方案:

<?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

?>
Run Code Online (Sandbox Code Playgroud)

类似的问题:#5612656

键盘:http://codepad.org/cBaGHxFU

更新:

你得到一个叫做数组的所有列表$businesses.

  1. 使用上面给出的方法生成随机列表ID,然后将其存储在数据库表中.
  2. 在每次页面刷新时,生成随机列表ID,并检查它是否与数据库中的值匹配.如果没有,请显示该列表并将该值添加到表中.
  3. 转到第1步.

完成后,您将一次显示所有20个列表.

希望这可以帮助!