0

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

1 回答 1

1

你需要检查你的checkifexists功能。

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

尝试调用它:

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

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

对于它的价值,您可以使用in_array更有效地做到这一点

于 2012-10-05T19:55:04.083 回答