Я пытаюсь вернуть все уникальные пути экземпляров из указанного каталога, рекурсивно.
я использую RecursiveDirectoryIterator
, Я также хотел бы опустить любые экземпляры путей, которые содержат «.» в них вот где у меня проблемы.
Вот что я собираюсь сделать в качестве теста:
<?php
function test($dir){
$dirArray = []; // the array to store dirs
$path = realpath($dir);
$dirs = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
$objects = new RecursiveIteratorIterator($dirs, RecursiveIteratorIterator::SELF_FIRST);
// loop through all objects and store names in dirArray[]
foreach($objects as $name => $object){
if($object->isDir() && strpos($object->getBasename(), '.') !== true) {
$dirArray[] = $name;
echo "test: " . $object->getBasename() . "\n";
}
}
print_r($dirArray);
}
test('/some/dir');
?>
Этот код около делает то, что мне нужно. Возвращает все уникальные каталоги, но включает в себя те, которые имеют «.» в имени пути.
Просто добавьте еще одну проверку и попробуйте использовать ->getPathname()
вместо:
if($object->isDir() && strpos($object->getPathname(), '.') === false) {
// do some stuff
}
Это просто означает, что если это каталог И если путь не содержит этого .
Других решений пока нет …