将parent参数添加到递归元素

时间:2014-04-18 19:50:33

标签: php recursion hyperlink generator

我正在构建一个菜单,我需要在生成的子项目上设置父键

该功能如下所示:

function get_menu($tagmenu){
$menu="";
$count=0;
foreach ($tagmenu as $key => $value) {
    $is_active=false;
    $class="";
    if(isset($_GET["tagsearch"])){
        if($key == $_GET["tagsearch"]){
            $is_aktive=true;
        };
    };
    $menu.= "<ul>";
    $sub="";
    if(is_array($value)){
        if (count($value)>0) {
            $sub.= "<div class='submenu'>";
            $sub.=get_menu($value);
            $sub.= "</div>";
        }
    }

    $li= "<li class='menuitem'><a href='?tagsearch=".$key."'>".$key."</a>";

    if (strpos($sub,"'menuitem active'")!==false || $is_active ) {
        $li=str_replace("'menuitem'", "'menuitem active'", $li);
    }
    $menu.=$li.$sub; 
    $menu.= "</li>";
    $menu.= "</ul>";
}
return $menu;
}

这是阵列;

Array(
    [fotografie] => Array(
            [schwarzweiss] => Array(
                    [street] => Array()

            )

     )

)

是否可以使用此结构将父数组的所有键添加到链接?

最后看起来应该是

<a href="fotografie-schwarzweiss-street"></a>

1 个答案:

答案 0 :(得分:0)

是的,确实如此。您需要向递归函数添加第二个参数,在该函数中传递当前字符串。

function get_menu($tagmenu, $shortcut = array())
{
    $menu="";
    $count=0;
    foreach ($tagmenu as $key => $value) 
    {
        $shortcut[] = $key;
        $is_active=false;
        $class="";
        if(isset($_GET["tagsearch"]))
        {
            if($key == $_GET["tagsearch"])
            {
                $is_aktive=true;
            };
        };
        $menu.= "<ul>";
        $sub="";
        if(is_array($value))
        {
            if (count($value)>0) 
            {
                $sub.= "<div class='submenu'>";
                $sub.=get_menu($value, $shortcut);
                $sub.= "</div>";
            }
        }

        $li= "<li class='menuitem'><a href='?tagsearch=".$key."' class=".implode('-', $shortcut).">".$key."</a>";

        if (strpos($sub,"'menuitem active'")!==false || $is_active ) 
        {
            $li=str_replace("'menuitem'", "'menuitem active'", $li);
        }
        $menu.=$li.$sub; 
        $menu.= "</li>";
        $menu.= "</ul>";
    }

    return $menu;
}

echo get_menu(
    array(
        'fotografie' => array(
            'schwarzweiss' => array(
              'street' => array()
            )
        )
    )
);

您在链接上已经有href属性,因此我使用class attr向您展示了示例。

演示:http://sandbox.onlinephpfunctions.com/code/184eaa428de75511eda1ffee8f8ad08b82a03919