2012-03-17 107 views
2

我有一個文件夾,裏面有一些文件和子文件夾。我需要返回具有給定擴展名的文件名或相對地址(如果文件在子文件夾中),例如.html在目錄樹中查找給定擴展名的文件

例如,這是給定文件夾的結構:

  • /text/something.ncx
  • /text/123.html
  • content.opf
  • toc.ncx
  • Flow_0 .html
  • Flow_1.html
  • Flow_2.html

因此,代碼(理想情況下以陣列)返回此:

  • 文本/ 123.html
  • Flow_0.html
  • Flow_1.html
  • Flow_2.html

這只是拔出.html擴展名,但我真的不怎麼解決這個問題。

+0

可能的重複:http://stackoverflow.com/questions/3062154/php-list-of-specific-files-in-a-directory – 2012-11-27 23:05:54

+0

可能的重複:http://stackoverflow.com/questions/3226519/use -php-scandirdir-and-get-only-images – 2012-11-27 23:06:37

回答

9

您可以使用RecursiveDirectoryIterator以遞歸方式獲得全部文件,然後使用RegexIterator過濾結果以迭代僅*.html文件。要獲得相對地址RecursiveDirectoryIterator::getSubPathname()可以使用。

$directory = '../path/to/your/folder'; 
$all_files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)); 
$html_files = new RegexIterator($all_files, '/\.html$/'); 

foreach($html_files as $file) { 
    echo $html_files->getSubPathname(), PHP_EOL; 
} 

如果你真的需要和陣列(迭代對象你常常不),你可以輕鬆地構建一個向上的foreach而不是echo -ing每個子路徑。

1

要列出從文件夾中的文件(其他城市$目錄值到您的參訪目錄名稱和@ $文件更改擴展名從.txt到一個較受歡迎的鏈接。

$directory = "../images/team/harry/"; 


$files = glob($directory . "*.txt"); 


foreach($files as $file) 
{ 
echo $file; 
} 
+1

這不會遞歸到子目錄中。 – salathe 2012-03-17 09:50:26

相關問題