我想要实现的是制作每次都从MySQL DB生成不同内容的网页。但是当我使用rand()函数时,一些选项可以重复。所以我想做的是使用动态数组“例外”的rand()函数,每次生成网页内容时都会更新,因此每个选项只向用户显示一次..
假设我有5种不同的选择 1,2,3,4,5
当rand()函数下次选择 3 时,将无法获得 3 ...
function randWithout($from, $to, array $exceptions) {
sort($exceptions);
$number = rand($from, $to - count($exceptions));
foreach ($exceptions as $exception) {
if ($number >= $exception) {
$number++;
} else {
break;
}
}
return $number;
}
$exceptions = array("3","4");
$random = randWithout(1, $num_rows, $exceptions);
这就是我想要的,但我希望每次更新数组“$ exceptions”......
有没有办法通过使用会话或其他选项来做到这一点?我不想使用另一个MySQL表..我希望它快速而简单
谢谢
答案 0 :(得分:2)
使用会话。会话用于数据持久性。像这样启动你的php文件:
<?php session_start();
//your code
将您的例外保存在会话变量中:
$_SESSION['exceptions']='exceptions Array';
每次用户访问网页时都会将其添加到会话中。
假设您要为其添加“5”。
她的更新代码
<?php session_start();
function randWithout($from, $to) {
global $exceptions;
sort($exceptions);
$number = rand($from, $to - count($exceptions));
foreach ($exceptions as $exception) {
if ($number >= $exception) {
$number++;
} else {
break;
}
}
return $number;
}
if(isset($_SEEION['exceptions'])){
$exceptions =$_SESSION['exceptions'];
}
$random = randWithout(1, $num_rows);
$exceptions[]=$random;
$_SESSION['exceptions']=$exceptions;
答案 1 :(得分:0)
此一般性问题之前已得到解答。见How to generate a list of unique random numbers?。为每个可能的页面分配一个数字,并使用适当的方法选择一个。