Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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_Session_Random - Fatal编程技术网

Php 无重复用户会话的随机链接

Php 无重复用户会话的随机链接,php,session,random,Php,Session,Random,我有7个链接,我需要显示每页或页面视图没有重复从以前的视图链接链接一个链接 链接需要以随机方式显示,如果用户访问7个页面(每页一个),则必须向用户显示所有7个链接,如果用户访问超过7个页面,cicle将重新开始 我希望问题是清楚的。 谢谢你,对不起我的英语 Daniel您应该将以前访问过的链接存储在会话或数据库中。您可以简单地洗牌链接,然后迭代。然后检查它是否曾经被访问过,并继续下去,直到你找到一个。如果在(完成迭代)中找不到,可以假设所有7个都已访问,并且可以重置会话/数据库 小代码示例(注:

我有7个链接,我需要显示每页或页面视图没有重复从以前的视图链接链接一个链接

链接需要以随机方式显示,如果用户访问7个页面(每页一个),则必须向用户显示所有7个链接,如果用户访问超过7个页面,cicle将重新开始

我希望问题是清楚的。 谢谢你,对不起我的英语
Daniel

您应该将以前访问过的链接存储在会话或数据库中。您可以简单地洗牌链接,然后迭代。然后检查它是否曾经被访问过,并继续下去,直到你找到一个。如果在(完成迭代)中找不到,可以假设所有7个都已访问,并且可以重置会话/数据库

小代码示例(注:伪代码)


将无序链接存储在会话中并逐个使用:

$links = array('a', 'b', 'c', …);

if (empty($_SESSION['links'])) {
    // first time visit, populate random order in session
    $_SESSION['links'] = array_keys($links);
    shuffle($_SESSION['links']);
}

// pop first link
$link = array_shift($_SESSION['links']);

// cycle array; or don't, to create a different order next time
$_SESSION['links'][] = $link;

// output link
echo $links[$link];

你好您的示例可以工作,但随机效果不是所需的效果,因为某些值会重复,是的,它们是随机的,但并非数组中的所有选项都会在再次启动新循环之前显示。我只是让“a”、“b”和“c”作为数组中的值,但在几次页面查看后,这些值会重复出现。我只是检查了几次,并不是所有的值都显示出来。@Daniel不应该是这样的。请尝试
var\u dump($\u会话['links'))
查看队列的状态,它应该可以完美地循环。是的。。。你是对的,对不起,我只是清理了浏览器,并再次检查,它的工作完美谢谢
$links = array('a', 'b', 'c', …);

if (empty($_SESSION['links'])) {
    // first time visit, populate random order in session
    $_SESSION['links'] = array_keys($links);
    shuffle($_SESSION['links']);
}

// pop first link
$link = array_shift($_SESSION['links']);

// cycle array; or don't, to create a different order next time
$_SESSION['links'][] = $link;

// output link
echo $links[$link];