我正在构建一个网站,每次刷新页面时都会随机显示一个yelp列表。yelp搜索api在一个数组中返回20个列表。现在,我使用PHP的函数rand(0,19)在每次刷新页面时生成一个随机列表($businesss[rand(019)])。
有人能给我推荐一种更聪明的随机化方法吗?我想在重复任何一个列表之前,将所有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
的数组中的所有列表。
- 使用上面给出的方法生成一个随机列表ID,然后将其存储在数据库表中
- 在每次刷新页面时,生成一个随机列表ID,并检查它是否与数据库中的值匹配。如果没有,则显示该列表并将该值添加到表中
- 转至步骤1
完成后,您将同时显示所有20个列表。
希望这能有所帮助!
尝试此代码
$a = range(1,36);
shuffle($a);
$array = array_slice($a, 0, 3);
print_r($array);
我会通过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>";