2012-03-18 18 views
3

サブディレクトリと特定のファイルタイプのみを検索する場合はどうすればいいですか? Ex。ランダムなものがアップロードされる "stuff"という名前のフォルダがあります。そして、私は、 "stuff"内のサブフォルダと.jpgファイルだけを検索したいとします。私は ディレクトリを検索するためのphp-globと.jpgのみ

$array = glob(‘stuff/{*.jpg}’, GLOB_BRACE);

...唯一の.jpgを検索するようにされて知っている唯一のサブディレクトリを検索することが...

$array = glob(‘stuff/*’, GLOB_ONLYDIR);

です...しかし、どのように私は、他の不要なファイルを取得せずに2つを組み合わせてください? GLOB_BRACEのサブディレクトリのパターンはありますか?

答えて

3

この再帰関数が何をすべきトリック:

function recursiveGlob($dir, $ext) { 
    $globFiles = glob("$dir/*.$ext"); 
    $globDirs = glob("$dir/*", GLOB_ONLYDIR); 

    foreach ($globDirs as $dir) { 
     recursiveGlob($dir, $ext); 
    } 

    foreach ($globFiles as $file) { 
     print "$file\n"; // Replace '\n' with '<br />' if outputting to browser 
    } 
} 

使用法:recursiveGlob('C:\Some\Dir', 'jpg');

は、あなたがそれを個々のファイルに他のことをしたい場合print "$file\n"の部分を交換してください。

この機能は、globの検索でより具体的になり、指定されたファイル拡張子を持つファイルだけでなく、ディレクトリにも一致しますが、簡単で透明性のためにこの方法で作成しました。

+0

うわー。驚くばかり。ありがとう! – Luchis

+0

私は戻って関数をテストして、機能していないことを発見しました。エラーを修正して最適化しました。この通知を受けることを願っています:-) –

2

私はあなたが特定のファイルタイプを探していて、もう1つはサブディレクトリーを探しているので正確にはわかりません。それらは全く異なるパターンです!言われて、stuff/stuff/内のすべての* .jpgファイルを含む配列し、またサブディレクトリを持つ方法は、さらに一歩あなたのコードを取るだろうと

$jpg_array = glob('stuff/{*.jpg}', GLOB_BRACE); 
$subdir_array = glob('stuff/*', GLOB_ONLYDIR); 

// Combine arrays 
$items = array_merge($jpg_array,$subdir_array); 

// Do something with values 
foreach($items as $item) 
{ 
    echo($item . "<br>"); 
} 
+0

あなたのソリューションに感謝します。シンプルで賢い。 – Luchis

+0

@ルチスこの解決策が問題を解決した場合は、この回答を受け入れてください。ありがとうございました。 –

関連する問題