我的包含文件(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的元素)
答案 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()