2012-10-20 41 views
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($文件)線的問題 它在菜單中列出兩個項目()和(..)。

感謝您的/是提供的所有幫助!我非常感激。

做一些測試,我更換了foreach循環用for循環。

$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"; 

仍然沒有「T工作(不會拉$目錄中的文件夾) 但是,如果我改變

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

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

它列出了所有的文件,以及在單個文件夾$目錄。 不知道它爲什麼這樣做。有任何想法嗎?

+1

'.'是當前文件夾,'..'是上一個文件夾,它們在技術上位於文件夾內。 –

+1

'.'和'..'出現在所有文件夾中。 –

+0

也許我有$目錄列出的錯誤。我的實際目標文件夾中還有另一個文件夾沒有列出。 – Rick

回答

0

GOT IT !!!

我想is_dir()必須列出有問題的文件夾的完整路徑,否則,它不起作用。我把我的代碼更改爲:

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

它的工作原理非常完美!

再次感謝大家的幫助!頭腦風暴與這個網站讓我的腦力激盪......

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/"; 
+0

是的,那裏應該有一個文件夾。我在想我的$目錄是錯誤的。該菜單填充在domain.com/index.php中,但是從domain.com/inc/menu.inc中調用。實際的目標文件夾位於domain.com/models/。再次感謝所有這些幫助!喜歡這個網站! – Rick

+0

見編輯。我更新了我的帖子。 –

+0

沒有。仍未列出/ models /文件夾內的文件夾。 – Rick

相關問題