创建历史列表,防止倍数

时间:2012-10-05 19:47:59

标签: php

我正在创建一个网站,其中一个功能是侧面它将向用户显示他们访问网站后访问过的页面,他们可以点击任何这些名称并将其带回那个页面。我有它工作,但当他们点击回到某个页面,如果他们再次点击它,它会写出重复页面。例如,如果说我们有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
)

1 个答案:

答案 0 :(得分:1)

您需要检查checkifexists功能。

您正在检查是否已提及此页面;如果有,则返回true。但是你正在做的是通过整个$_SESSION['visitedpages']查看页面是否在那里,当然它是。

尝试使用以下方法调用它:

$exists = checkifexists($name, $x - 1);

然后你只需检查数组中较早的元素,看它们是否重复。

对于它的价值,您可以使用in_array

更有效地完成此操作