动态菜单系统

时间:2010-08-24 16:04:18

标签: php arrays while-loop

我正在开发一个动态菜单系统,因为我构建的网站有一个严格的命名约定。

例如,如果我的脚本名为AboutUs.php,则“关于我们”将成为父菜单项。但是,如果我有一个名为Product.Product1.php的脚本,则“产品”是包含“ Product1 ”作为子菜单项的父项。

我的想法是遍历抓取前端文件夹中的所有脚本并构建一个数组,以便使用嵌套的foreach

回显ul / li元素

我似乎无法让Array$submenu)恰到好处..谢谢!

if ($handle = opendir('frontend/')) {
while(false !== ($sFile = readdir($handle))) {
    if (strrpos($sFile, ".php") === strlen($sFile)-strlen(".php")) {
        $pos1 = strrpos($sFile, ".");
        $menu = substr($sFile, 0, $pos1);
        $pos2 = strrpos($sFile, ".php");
        if ($pos1 == $pos2) { // "." and ".php" where in the pos, skip submenu
            $links[$menu] = 'fontend/'.$sFile;
        } else {
            $submenu = substr($sFile, $pos1, $pos2);
            $links[$menu][$submenu] = 'fontend/'.$sFile;
        }
    }
}

}

2 个答案:

答案 0 :(得分:2)

在我看来,你可能会更好地爆炸'。'而不是使用strpos和regex。

while(false !== ($sFile = readdir($handle))) {
    if (strrpos($sFile, ".php") === strlen($sFile)-strlen(".php")) {
        $parts = explode('.', $sFile);
        if (count($parts) == 2)
        {
            $urls[$parts[0]] = 'frontend/'.$sFile;
        }
        else if (count($parts) == 3)
        {
            $urls[$parts[0]][$parts[1]] = 'frontend/'.$sFile;
        }
    }
}

答案 1 :(得分:1)


if ($handle = opendir('frontend/')) {
while(false !== ($sFile = readdir($handle))) {
    if (strrpos($sFile, ".php") === strlen($sFile)-strlen(".php")) {
        $posExt = strrpos($sFile, "." );
        $menu = substr($sFile, 0, $pos1);
        $posSub = strrpos($menu, ".");
        if ($posSub === false) { // "." and ".php" where in the pos, skip submenu
            $urls[$menu] = 'fontend/'.$sFile;
        } else {
            $submenu = substr($menu, $posSub, ($posExt-$posSub));
            $urls[$menu][$submenu] = 'fontend/'.$sFile;
        }
    }
}

虽然没有测试过,但它应该可以工作。 ^^

编辑: 修复但获取$子菜单。在某处也不可能出现“一分一秒”的错误。