我正在尝试查找具有特定扩展名的文件夹和子文件夹中的所有文件。
$dir = new RecursiveDirectoryIterator($directory);
$iter = new RecursiveIteratorIterator($dir);
$files = new RegexIterator($iter, '/.*\.(src|in|out|rc)$/i', RecursiveRegexIterator::GET_MATCH);
我的输出应该如下var_dump()
array(105) {
[2]=>
string(6) "00.out"
[3]=>
string(6) "00.src"
[4]=>
string(6) "01.out"...
}
实际结果
object(RegexIterator)#4 (1) {
["replacement"]=>
NULL
}
我在哪里做错了? 谢谢你的帮助!
答案 0 :(得分:2)
看起来PHP glob()
函数可以执行您想要的操作:
glob()函数搜索匹配模式的所有路径名 根据libc glob()函数使用的规则,即 类似于常见shell使用的规则。
foreach (glob("*.txt") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
}
这是agd243的一个漂亮的函数,它使用glob()通过扩展名查找所有文件并将其作为数组返回:
function findFiles($directory, $extensions = array()) {
function glob_recursive($directory, &$directories = array()) {
foreach(glob($directory, GLOB_ONLYDIR | GLOB_NOSORT) as $folder) {
$directories[] = $folder;
glob_recursive("{$folder}/*", $directories);
}
}
glob_recursive($directory, $directories);
$files = array ();
foreach($directories as $directory) {
foreach($extensions as $extension) {
foreach(glob("{$directory}/*.{$extension}") as $file) {
$files[$extension][] = $file;
}
}
}
return $files;
}
var_dump(findFiles("C:\\baseFolder", array (
"src",
"in",
"out",
"rc"
)));