PHP SPL RecursiveDirectoryIterator RecursiveIteratorIterator, восстанавливающий полное дерево

как я могу получить 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 */ //... }