0

我有一个包含一些问题的数据库,我希望每次打开页面时都不要刷新以以不同的顺序显示它们。

洗牌,没关系:

 function shuffle_keys( &$array ) {
    $keys = array_keys($array);

    shuffle($keys);
    foreach($keys as $key) {
        $new[$key] = $array[$key];
    }

    $array = $new;   
} 

使用数据库中的值对数组进行洗牌并打印:

shuffle_keys($array_questions); 
foreach( $array_questions as $key => $val ) {
    $key_value = ++$key;
    echo "<a href = '?id=$val'>".$key_value."</a> ";
}

刚才,当我每次洗牌都不同时刷新时,我只在第一次打开页面时才想要这种方式。

4

3 回答 3

1

如果您想为同一会话进行相同的改组,(这就是我的理解)

您可以使用$_SESSION变量来存储数组。

session_start();
if (isset($_SESSION['array_questions']))
    $array_questions=$_SESSION['array_questions'];
else
{
shuffle_keys($array_questions); 
foreach( $array_questions as $key => $val ) {
    $key_value = ++$key;
    echo "<a href = '?id=$val'>".$key_value."</a> ";
}
 $_SESSION['array_questions']=$array_questions;
}
于 2013-07-12T08:36:39.310 回答
1

您无法自行检测页面刷新。也许考虑设置一个cookie并断言它是否存在于打开的页面上?

于 2013-07-12T08:36:42.110 回答
0

您可以为此目的使用静态变量。只需创建一个类,如下所示:

class Base {

    protected static $variable = 0;
}

class child extends Base {

    function set() {

        self::$variable = 1; // let say 1 = 'sorted'
    }

    function show() {

    echo(self::$variable);
    }
}

现在,当您进入您的网站时,

创建对象并设置变量,调用方法

$c1 = new Child();
if($c1->show() == 0)
{
    // sort your array here and set the static flag to sorted(1)

    $c1->set();
}

希望这有助于...

于 2013-07-12T08:57:40.717 回答