Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-会话、洗牌函数和数组_Php - Fatal编程技术网

PHP-会话、洗牌函数和数组

PHP-会话、洗牌函数和数组,php,Php,因此,我创建了一个测验,通过使用shuffle()函数在最后生成一个随机引号 当我刷新页面时,我会重复地从数组中获取不同的值 我希望它保持在相同的值 这是我的密码: <?php $answer=array( "Good job.", "Great work!", "Excellent." ); shuffle ($answer); echo $answer[0]; ); 提前谢谢 已编辑(仍然不起作用。) 命令session\u start()只会使会话可用,并且在大多数

因此,我创建了一个测验,通过使用
shuffle()
函数在最后生成一个随机引号

当我刷新页面时,我会重复地从数组中获取不同的值

我希望它保持在相同的值

这是我的密码:

<?php

$answer=array(

"Good job.", 
"Great work!", 
"Excellent."

);

shuffle ($answer);

echo $answer[0];

);
提前谢谢

已编辑(仍然不起作用。)


命令
session\u start()
只会使会话可用,并且在大多数配置中已经完成。您需要做的是实现将答案存储到会话中的实际代码,并从那里重试(如果可用)

一个小样本(不是完整的代码,您可能想自己学习)可能如下所示:

if( isset $_SESSION["myAnswer"] ){
    $answerIdx = $_SESSION["myAnswer"];
}
else{
    // Do it like you did before...
    $_SESSION["myAnswer"] = $answerIdx;
}

下面是一个饼干的例子。我们不洗牌数组,而是取一个随机键,然后将其保存到cookie中。由于cookies可以被篡改,我们确保适当地验证该值

$answer = array(
  "Good job.", 
  "Great work!", 
  "Excellent."
);


if (isset($_COOKIE['answer'])) {
    $answer_key = $_COOKIE['answer'];
}
if (!isset($answer_key) || !isset($answer[$answer_key])) {
    $answer_key = rand(0, count($answer)-1);
    setcookie('answer', $answer_key, time()+9999);
}

echo $answer[$answer_key];

这只适用于键为数字(0,1,…,n)的数组。使用前请确保不要输出任何内容(包括空格)。

当然可以,如果
shuffle
,则每次执行代码时,答案都是随机不同的。如果您在使用cookie或会话实现解决方案时遇到问题,请让我们更详细地了解这些问题。我确信我确实这样做了,但我的变量在其中,它无法工作。然后请发布您的代码。您上面显示的代码不包含有问题的部分。@ljacqu在会话中还是在回音中?@ljacqu我已经这样做回音了-
@MartinShaba我搞错了,删除了我的评论。很抱歉。很抱歉,但当我刷新时仍然出现错误@ljacqu@jacqu错误消失了,但当我刷新时,它仍然会再次随机化该值。@MartinShaba,这很奇怪;也许您的浏览器不喜欢从localhost创建cookie。您几乎可以使用会话变量了,所以谢天谢地,我们不需要担心什么!:)我使用的是chrome,非常支持Cookie/会话。一些浏览器对时间戳的内容很挑剔。只要把它放在一边,它就“可能”起作用了。另一个最可能的错误是提到的“setcookie之前的输出”内容。不要用
?>
关闭文件,否则可能会导致文件后出现多余的空间或换行。
if( isset $_SESSION["myAnswer"] ){
    $answerIdx = $_SESSION["myAnswer"];
}
else{
    // Do it like you did before...
    $_SESSION["myAnswer"] = $answerIdx;
}
$answer = array(
  "Good job.", 
  "Great work!", 
  "Excellent."
);


if (isset($_COOKIE['answer'])) {
    $answer_key = $_COOKIE['answer'];
}
if (!isset($answer_key) || !isset($answer[$answer_key])) {
    $answer_key = rand(0, count($answer)-1);
    setcookie('answer', $answer_key, time()+9999);
}

echo $answer[$answer_key];