php 生成无重复的随机数

xam8gpfp  于 2023-05-27  发布在  PHP
关注(0)|答案(3)|浏览(147)

我正在建立一个网站,每次页面刷新时都会随机显示一个Yelp列表。yelp搜索API返回一个数组中的20个列表。现在,我使用PHP的函数兰德(0,19)在每次刷新页面时生成一个随机列表($businesses[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/>";

?>
lnxxn5zx

lnxxn5zx1#

最简单的解决方案:

$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
Codepad:http://codepad.org/cBaGHxFU

更新:

您将在一个名为$businesses的数组中获取所有列表。
1.使用上面给出的方法生成一个随机列表ID,然后将其存储在数据库表中。
1.在每次刷新页面时,生成一个随机列表ID,并检查它是否与数据库中的值匹配。如果没有,显示该列表并将该值添加到表中。
1.转到步骤1。
完成后,您将一次显示所有20个列表。
希望这有帮助!

lvjbypge

lvjbypge2#

试试这个代码

$a = range(1,36);

shuffle($a);

$array = array_slice($a, 0, 3);

print_r($array);
jq6vz3qz

jq6vz3qz3#

我会尝试使用while循环:

<?php

  $i = 0;
  $arr = array();

  while($i<10){
    $num = rand(1, 12);
    $c = 0;
    echo $num . "<br>";

    for($j=0; $j<4; $j++){
      if($arr[$j] == $num){
        $c++;
        break;
      }
    }
    if($c==0){
      $arr[$i] = $num;
      $i++;
    }
  }

  echo "<pre>";
  print_r($arr);
  echo "</pre>";

相关问题