3

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

谢谢

4

2 回答 2

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;
于 2012-12-25T19:19:14.447 回答
0

这个一般性问题之前已经回答过。请参阅如何生成唯一随机数列表?. 为每个可能的页面分配一个编号,然后使用适当的方法选择一个。

于 2012-12-25T20:41:25.750 回答