Как я могу получить полное дерево каталогов, используя SPL
, возможно, используя RecursiveDirectoryIterator
и RecursiveIteratorIterator
?
Как я могу получить полное дерево каталогов с помощью SPL?
Ответы (2)
По умолчанию 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;
}
}
person
Gordon
schedule
16.04.2010
Вы можете просто или делать все, что хотите
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}
person
nefo_x
schedule
17.03.2010
Привет, я не понимаю, как - из документа PHP RecursiveIteratorIterator - вы считаете, что
$file
относится к типу SplFileInfo?
- person martin; 29.12.2016