Я работаю с рекурсивными итераторами PHP SPL, они меня довольно сбивают с толку, но я учусь.
Я использую их в проекте, где мне нужно рекурсивно получить все файлы и исключить папки из моего результата. Я изначально использовал этот метод ...
$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory,
RecursiveIteratorIterator::CHILD_FIRST);
foreach ($iterator as $fileinfo) {
if ($fileinfo->isDir()) {
//skip directories
//continue;
}else{
// process files
}
}
Но затем пользователь SO предложил мне использовать этот метод, чтобы мне не пришлось использовать метод isDir ()
в моем цикле ...
$directory = new RecursiveDirectoryIterator($path,
RecursiveDirectoryIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($directory,
RecursiveIteratorIterator::LEAVES_ONLY);
Обратите внимание, что я использовал RecursiveDirectoryIterator :: SKIP_DOTS
в конструкторе RecursiveDirectoryIterator
, который должен пропускать папки или .
и ..
Теперь я запутался, потому что после некоторого теста, даже без использования RecursiveDirectoryIterator :: SKIP_DOTS
, похоже, они не отображаются, я использую Windows, может быть Причина, точки появляются только в системе типа Unix? Или я запутался до такой степени, что что-то упустил?
Также, используя RecursiveIteratorIterator :: LEAVES_ONLY
вместо RecursiveIteratorIterator :: CHILD_FIRST
, папки не будут отображаться в моем результат, которого я хочу, но не понимаю почему? В документации нет информации об этом