生成不重复的随机数
Posted
技术标签:
【中文标题】生成不重复的随机数【英文标题】:Generating random numbers without repeats 【发布时间】:2013-07-20 15:58:15 【问题描述】:我正在构建一个网站,每次刷新页面时都会随机显示一个 yelp 列表。 yelp search api 在一个数组中返回 20 个列表。现在,我正在使用 php 的函数 rand(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/>";
?>
【问题讨论】:
执行此操作的最简单方法是预先填充经过清理的随机值列表。为什么不提前创建订单,然后选择最后一个未显示的订单。对于普通用户来说,这似乎是随机的。 你如何让所有 20 人都在身边展示给他们看?您是在本地存储列表,还是 API 会根据要求向您发送相同的列表? 查找“Fisher Yates”,或查看***.com/questions/8116872/…。 @Sheriff_McLawDog 我目前没有存储任何列表。该 api 在一个名为 $businesses 的数组中发送 20 个列表。我想每次刷新一次显示一个列表 【参考方案1】:最简单的解决方案:
$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
的数组中获取所有列表。
-
使用上面给出的方法生成一个随机列表 ID,然后将其存储到您的数据库表中。
在每次页面刷新时,生成一个随机列表 ID,并检查它是否与数据库中的值匹配。如果没有,请显示该列表并将该值添加到您的表格中。
转到步骤 1。
完成后,您将一次显示所有 20 个列表。
希望这会有所帮助!
【讨论】:
对不起,我应该包含代码以便更好地说明。请看我的编辑【参考方案2】:试试这个代码
$a = range(1,36);
shuffle($a);
$array = array_slice($a, 0, 3);
print_r($array);
【讨论】:
【参考方案3】:我会通过 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>";
【讨论】:
以上是关于生成不重复的随机数的主要内容,如果未能解决你的问题,请参考以下文章