как я могу получить the full directory tree
с помощью SPL
?
По умолчанию, RecursiveIteratorIterator
будет использовать LEAVES_ONLY
для второго аргумента для __construct
. Это означает, что он будет возвращать только файлы. Если вы хотите включить файлы и каталоги (по крайней мере, это то, что я считаю полным каталогом), вам нужно будет:
$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 */ //... }