随机页面生成排除已在php中生成的选项

时间:2012-12-25 19:14:10

标签: php mysql random options

我想要实现的是制作每次都从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表..我希望它快速而简单

谢谢

2 个答案:

答案 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?。为每个可能的页面分配一个数字,并使用适当的方法选择一个。