我正在创建一个网站,其中一个功能是侧面它将向用户显示他们访问网站后访问过的页面,他们可以点击任何这些名称并将其带回那个页面。我有它工作,但当他们点击回到某个页面,如果他们再次点击它,它会写出重复页面。例如,如果说我们有10页,main01到main10。用户到页面main05,并决定他要回到main03,他点击他的历史列表上的main03并且去那里就好了,决定他继续前进并点击“继续”这将他带到页面main04,这是精细。但历史列表变为:
main01
main02
main03
main04
main05
main03
main04
所以我试图做的是创建一个方法,检查访问的页面是否已经添加到数组中,如果已经,那么它应该只回显任何内容。如果它没有那么它回应正确的链接。但每当我现在尝试它时,它只显示您访问过的最后一页,并在每次更改页面时覆盖它。这是我的代码:
if($_POST['visited']){
$_SESSION['visitedpages'][$_SESSION['i']] = $_POST['visited'];
$_SESSION['i']++;
echo "<pre>";
print_r($_SESSION['visitedpages']);
echo "</pre>";
}
if($_SESSION['visitedpages']){
$a_length = count($_SESSION['visitedpages']);
for($x = 0; $x < $a_length; $x++){
$name = $_SESSION['visitedpages'][$x];
$exists = checkifexists($name, $a_length);
if(!$exists){
echo "<a href=\"$name.php\">$name</a><br />";
}
else{
echo "";
}
}
}
function checkifexists($name, $a_length){
for($z = 0; $z < $a_length;$z++){
$existingname = $_SESSION['visitedpages'][$z-1];
if($name === $existingname) {
return true;
}
}
return false;
}
我怎样才能正常工作?任何帮助,将不胜感激。
编辑:实际上看起来我通过检查它是否存在于写入数组时是否存在,而不是将其写为链接。但是现在每当我点击链接访问该页面时(例如main05中的main03),它会转到main03,但是历史列表没有显示,有关此的任何输入吗?
EDIT2:所以我根据您的建议使用in_array更改了它,并且它正确显示但仍然列出重复项。这是我使用的代码:
if(in_array($_POSTED['visited'],$_SESSION['visitedpages'])){
echo "";
}
else{
$_SESSION['visitedpages'][$_SESSION['i']] = $_POST['visited'];
$_SESSION['i']++;
echo "<pre>";
print_r($_SESSION['visitedpages']);
echo "</pre>";
$arrayinit = true;
}
现在每当我访问前几页时,数组看起来都是这样的:
Array
(
[0] => main01
[1] => main02
[2] => main03
[3] => main04
[4] => main03
)
答案 0 :(得分:1)
您需要检查checkifexists
功能。
您正在检查是否已提及此页面;如果有,则返回true。但是你正在做的是通过整个$_SESSION['visitedpages']
查看页面是否在那里,当然它是。
尝试使用以下方法调用它:
$exists = checkifexists($name, $x - 1);
然后你只需检查数组中较早的元素,看它们是否重复。
对于它的价值,您可以使用in_array
更有效地完成此操作