Я пытаюсь возвращать все уникальные пути экземпляров из указанного каталога, рекурсивно.
Я использую 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');
?>
Этот код почти делает то, что мне нужно. Он возвращает все уникальные dirs, но включает в себя те, у кого есть. в названии пути.
Просто добавьте еще одну проверку внутри и попытайтесь использовать ->getPathname()
вместо:
if($object->isDir() && strpos($object->getPathname(), '.') === false) {
// do some stuff
}
Это просто означает, что если это каталог И если pathname не содержит этого .
!== true
работа?0-n
илиfalse
. позиции0 - to whatever number
если он существует.false
если не найден