2012-03-17 22 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 –

+0

可能な複製:http://stackoverflow.com/questions/3226519/use -php-scandirdir-and-get-only-images –

答えて

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; 
} 

あなたが本当に必要と配列(反復可能なオブジェクトを使用すると、頻繁にない)場合は、簡単に各サブパスを-ing foreachではなくechoに1を構築することができます。

0

あなたは変更$ディレクトリの値が1を兼ね備えする.TXTからあなたの拡張子を変更し、あなた兼ね備えdirnameのにし、$ファイル@(フォルダからファイルを一覧表示するにはglob function

glob('*.html') 
1

を使用することができます。

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


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


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

これは、サブディレクトリに繰り返されることはありません。 – salathe

関連する問題