我的问题是,我有4个目录:
/dir1/
/dir2/
/dir3/
/dir4/
可能包含任意数量的子目录,例如:
/dir1/
/subdir1/
/subdir2/
/dir2/
/subdir1/
/subdir2/
/subdir3/
/dir3/
/subdir1/
/dir4/
/subdir1/
/subdir2/
/subdir3/
这些子目录可以包含任意数量的.txt文件,例如:
/dir1/
/subdir1/
/1.txt
/2.txt
/subdir2/
/1.txt
/dir2/
/subdir1/
/1.txt
/subdir2/
/1.txt
/2.txt
/subdir3/
/1.txt
/dir3/
/subdir1/
/1.txt
/2.txt
/dir4/
/subdir1/
/1.txt
/subdir2/
/1.txt
/subdir3/
/1.txt
/2.txt
/3.txt
问题是以自动方式找到这些.txt文件。
Impartant:目前只有2个级别的目录,如上所示。 我设法到目前为止:
/Applications/MAMP/htdocs/test/public/dir1/.
/Applications/MAMP/htdocs/test/public/dir1/..
/Applications/MAMP/htdocs/test/public/dir1/subdir1/1.txt
/Applications/MAMP/htdocs/test/public/dir1/subdir1/1.txt
/Applications/MAMP/htdocs/test/public/dir1/subdir2/1.txt
/Applications/MAMP/htdocs/test/public/dir1/subdir2/1.txt
使用:
$path = realpath('/dir1');
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) {
$files[] = $filename;
}
for ($i=0; $i < count($files); $i++) {
echo $files[$i] . "<br>";
}
还可以欣赏一系列路径,例如array(sub1/1.txt, sub1/2.txt, sub2/1.txt ...)
。
欢迎任何帮助。
答案 0 :(得分:1)
你的意思是这样吗?
<强>更新强>
<?php
function scanDirectory($directory) {
$files = glob($directory . '/*');
$data = array();
foreach ($files as $file) {
if (is_dir($file)) {
$data = array_merge($data, scanDirectory($file));
} else if (substr($file,-4) == '.txt') {
$data[] = $file;
}
}
return $data;
}
$startDirectory = realpath(__DIR__);
$data = scanDirectory($startDirectory);
var_dump($data);
?>
答案 1 :(得分:0)
由于您使用的是RecursiveDirectoryIterator,因此您应该查看globiterator,它可以帮助您遍历目录和匹配文件。
修改强>: 如文档中所述:
以类似于glob()的方式遍历文件系统。
您可以轻松地遍历匹配模式的文件:
$it = new GlobIterator('./*/*.txt');
foreach($it as $item){
var_dump($item->getFilename());
}