基于URL的PHP​​动态面包屑

时间:2018-09-21 19:28:43

标签: php foreach

我正在努力使面包屑正常工作。

现在它们可以工作,但是onclick中的网址不正确。

<?php
//$url = strstr($_SERVER["REQUEST_URI"], 'admin');
$url = strstr('/content/modal/admin/content/polls.php', 'admin'); // admin/content/polls.php
$parse_url = preg_replace('/\.[^.\s]{3,4}$/', '', $url); // admin/content/polls

$array = explode("/", $parse_url);

$counter = 0;
foreach($array as $item) {
    echo '<a href="javascript:;"  onclick="initializemodal(\'' . $array[$counter] . '\')">' . $item . '</a> / ';
    $counter++;
}

显示为:

<a href="javascript:;"  onclick="initializemodal('admin')">admin</a> / 
<a href="javascript:;"  onclick="initializemodal('content')">content</a> /
<a href="javascript:;"  onclick="initializemodal('polls')">polls</a> / 

我要存档的结果:

<a href="javascript:;"  onclick="initializemodal('admin')">admin</a> / 
<a href="javascript:;"  onclick="initializemodal('admin/content')">content</a> /
<a href="javascript:;"  onclick="initializemodal('admin/content/polls')">polls</a> / 

如何编辑脚本,使其像上面的示例一样工作?

2 个答案:

答案 0 :(得分:1)

评论对

$counter = 0;
foreach($array as $item) {
    echo '<a href="javascript:;"  onclick="initializemodal(\'' . $array[$counter] . '\')">' . $item . '</a> / ';
    $counter++;
}

Foreach可以像

一样使用
foreach($array AS $index => $value)

不需要$ counter,只需使用$index

此外,您现在将$counter++;作为一行,但是您可以将其与上面的行合并:

    ... initializemodal(\'' . $array[$counter++] . '\')"...

请注意,如果将++放在变量后面,使用该变量后它将增加。

$i = 0;
echo $i++; // This will print 0
echo $i++; // This will print 1
$i = 0;
echo ++$i; // This will print 1
echo ++$i; // This will print 2

要回答您的问题,您需要存储以前的路径。

$path = []
foreach($array as $value) {
    $path[] = $value; // This array will first contain only one item, then two, then three, etc.
    echo '<a href="javascript:;"  onclick="initializemodal(\'' . implode('/', $path) . '\')">' . $item . '</a> / ';
}

implode将粘贴$path中的所有值。首先,没有什么可以胶合的,因此将产生admin。第二次迭代将使admin与内容粘合在一起,并在它们之间添加一个/。等

答案 1 :(得分:0)

您需要粘贴所有元素直到$ counter当前值。现在,您仅使用$counter指向的内容,因此您总是会得到最后一个元素,而不是整个“路径”。基本上,您需要另一个循环(未经测试):

$counter = 0;
foreach($array as $item) {
    $tmp = [];
    for ($i=0; $i<=$counter; $i++) {
       $tmp[] = $array($i);
    }
    $path = implode('/', $tmp);
    echo '<a href="javascript:;"  onclick="initializemodal(\'' . $path . '\')">' . $item . '</a> / ';
    $counter++;
}