为什么我的包含文件在isset时再次执行(POST ['submit'])?

时间:2012-04-04 03:22:00

标签: php arrays shuffle

我的包含文件(include.php)是:

<?php
$myarray=(a,b,c);
shuffle($myarray);
?>

我的主要php文件是:

include('include.php');

if isset($_POST['submit_button']){
      echo "Button was clicked";
      echo $myarray;
      }
else {
     echo "Not clicked."; 
     echo $myarray;
     }
?>

<form method='POST'><input type='submit' name='submit_button'></form>

点击按钮后,为什么$myarray的元素以不同的顺序显示?是不是只洗了一次?

如何防止shuffle被执行多次? (这样我就可以在点击按钮之前和之后以相同的顺序显示myarray的元素)

2 个答案:

答案 0 :(得分:2)

每次请求都会解释您的PHP文件。正如你现在所拥有的那样,系统中没有内存,所以你的文件无法“记住”数组已被洗牌。此外,如果你将数组洗牌一次,然后第二次加载页面,并管理来改变它,那么数组将是(a,b,c),因为变量被初始化为(a,b,c)并且从不洗牌。

要做你想做的事,如果我理解正确,你可以使用会话。

$myarray=(a,b,c);

if (!isset($_SESSION['shuffled'])) {
    shuffle($myarray);
    $_SESSION['shuffled'] = $myarray;
} else {
    $myarray = $_SESSION['shuffled'];
}

答案 1 :(得分:1)

这种情况正在发生,因为每次加载页面时,都会包含该文件,这也会再次对数组进行洗牌。

尝试使用serialize(),然后按所需顺序发布数组。使用unserialize()

检索它

http://www.php.net/manual/en/function.serialize.php