为什么当isset(POST[';submit';])时,我包含的文件会再次执行


Why is my included file executed again when isset(POST['submit'])?

我包含的文件(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的元素以不同的顺序显示?它不是只洗过一次吗?

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

您的PHP文件会根据每个请求进行解释。现在,系统中没有内存,因此文件无法"记住"数组已经被打乱。此外,如果您对数组进行一次混洗,然后第二次加载页面,并管理而不是对其进行混洗,则数组将为(a,b,c),因为变量初始化为(a、b、c),并且从不混洗。

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

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

之所以会发生这种情况,是因为每次加载页面时,都会包含文件,这也会再次打乱数组。

请尝试使用serialize(),然后按所需顺序POST阵列。使用unserialize() 检索

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