0

我正在尝试使用 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";

仍然不起作用(不会在 $directory 中提取文件夹)但是,如果我更改

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

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

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

4

2 回答 2

0

知道了!!!

我猜 is_dir() 必须列出相关文件夹的完整路径,否则它不起作用。我将代码更改为:

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

它完美无缺!

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

于 2012-10-20T01:26:34.003 回答
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/";
于 2012-10-20T00:45:18.367 回答