我正在开发一个动态菜单系统,因为我构建的网站有一个严格的命名约定。
例如,如果我的脚本名为AboutUs.php
,则“关于我们”将成为父菜单项。但是,如果我有一个名为Product.Product1.php
的脚本,则“产品”是包含“ Product1 ”作为子菜单项的父项。
我的想法是遍历抓取前端文件夹中的所有脚本并构建一个数组,以便使用嵌套的foreach
我似乎无法让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;
}
}
}
}
答案 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;
}
}
}
虽然没有测试过,但它应该可以工作。 ^^
编辑: 修复但获取$子菜单。在某处也不可能出现“一分一秒”的错误。