Как я могу получить полное использование дерева каталогов SPL
, возможно использование RecursiveDirectoryIterator
и RecursiveIteratorIterator
?
По умолчанию RecursiveIteratorIterator
будет использовать LEAVES_ONLY
для второго аргумента конструкции __
. Это означает, что он вернет только файлы. Если вы хотите включить каталоги файлов и (по крайней мере, это то, что я считаю полным деревом каталогов), вам нужно будет сделать:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST
);
, а затем вы можете foreach
поверх него. Если вы хотите вернуть дерево каталогов вместо его вывода, вы можете сохранить его в массиве, например
foreach ($iterator as $fileObject) {
$files[] = $fileObject;
// or if you only want the filenames
$files[] = $fileObject->getPathname();
}
Вы также можете создать массив $ fileObjects
без foreach
, выполнив:
$files[] = iterator_to_array($iterator);
Если вы хотите, чтобы возвращались только каталоги, foreach
поверх $ iterator
вот так:
foreach ($iterator as $fileObject) {
if ($fileObject->isDir()) {
$files[] = $fileObject;
}
}
Вы можете просто или делать все, что хотите
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}