我正在尝试使用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]))
它列出了所有文件以及$目录中的单个文件夹。 不知道为什么会这样做。有什么想法吗?
答案 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])) {
它完美无缺!
再次感谢大家的帮助!用这个网站进行头脑风暴让我的脑汁流淌......