Как я могу получить полное дерево каталогов с помощью SPL?

Как я могу получить полное использование дерева каталогов SPL, возможно использование RecursiveDirectoryIterator и RecursiveIteratorIterator?

6
задан Félix Gagnon-Grenier 5 August 2018 в 17:37
поделиться

2 ответа

По умолчанию 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;
    }
}
19
ответ дан 8 December 2019 в 05:54
поделиться

Вы можете просто или делать все, что хотите

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
    /* @var $file SplFileInfo */
    //...
}
3
ответ дан 8 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: