php - 用于搜索目录和仅限.jpg的glob

时间:2012-03-18 02:17:09

标签: php file glob

如果我想搜索唯一的子目录和某些文件类型,该怎么办? 防爆。我有一个名为“stuff”的文件夹,其中上传了随机内容。并说我想在“东西”中搜索子文件夹和.jpg文件,仅此而已。我知道只搜索.jpg是......

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

并且只搜索子目录是......

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

...但是如何在不获取任何其他不需要的文件的情况下将两者合并? GLOB_BRACE的子目录是否有模式?

2 个答案:

答案 0 :(得分: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次搜索中可以更具体,只匹配目录以及具有指定文件扩展名的文件,但我这样做是为了简化和透明。

答案 1 :(得分:2)

我不确定我是非常关注的,因为你正在寻找一种特定的文件类型,而另一种你正在寻找子目录。那些是完全不同的模式!

话虽这么说,让一个包含stuff/中所有* .jpg文件的数组以及stuff/中的子目录的方法是让你的代码更进一步:

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