列出菜单系统中的所有文件夹

时间:2012-10-20 00:34:31

标签: php

我正在尝试使用scandir()将目录中的所有文件夹列入我正在制作的菜单结构中。这是我到目前为止的代码:

$directory = "models/";
$files = scandir($directory);

echo "  <a class=\"menuitem submenuheader\" href=\"#\" >models</a>
        <div class=\"submenu\">\n
        <ul>\n";

foreach($files as $file)
{
     if(is_dir($file))
     {
        echo "<li><a href=\"$file.html\">$file</a></li>\n";
     }
}
echo "</ul>\n</div>\n";

我认为我在代码的if(is_dir($ file)行中遇到了问题。 它列出了菜单(。)和(..)中的两个项目。

感谢您提供的任何/所有帮助!我非常感激。

为了做一些测试,我用for循环替换了foreach循环。

$directory = "models/";
$folders = scandir($directory);

echo "<a class=\"menuitem submenuheader\" href=\"#\" >models</a>\n";
echo "<div class=\"submenu\">\n";
echo "<ul>\n";

for ($i=0; $i<count($folders); $i++) {
     if ($folders[$i] != '.' && $folders[$i] != '..') {
         if(is_dir($folders[$i])) {
            echo "<li><a href=\"" . $folders[$i] . ".html\">" . $folders[$i] . "</a></li>\n";
         }
     }
}
echo "</ul>\n</div>\n";

仍然无效(不会在$目录中拉一个文件夹) 但是,如果我改变了

if(is_dir($folders[$i]))

if(!is_dir($folders[$i]))

它列出了所有文件以及$目录中的单个文件夹。 不知道为什么会这样做。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

评论是对的。你可以添加条件来忽略它们:

if(is_dir($file) && $file != '.' && $file != '..')
{
   echo "<li><a href=\"$file.html\">$file</a></li>\n";
}

除非你说的是这些是唯一的结果,应该有更多。

另外,请确保正确调用路径。您可以使用$_SERVER['DOCUMENT_ROOT']并从那里构建正确的路径。像这样:

$directory = $_SERVER['DOCUMENT_ROOT']."/models/";

答案 1 :(得分:0)

GOT IT !!!

我猜is_dir()必须列出有问题的文件夹的FULL PATH,否则,它不起作用。我把我的代码更改为:

if(is_dir($directory . $folders[$i])) {

它完美无缺!

再次感谢大家的帮助!用这个网站进行头脑风暴让我的脑汁流淌......