рекурсивные результаты итератора каталога: отфильтровывать определенные символы из результирующих путей

Я пытаюсь вернуть все уникальные пути экземпляров из указанного каталога, рекурсивно.

я использую 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');

?>

Этот код около делает то, что мне нужно. Возвращает все уникальные каталоги, но включает в себя те, которые имеют «.» в имени пути.

0

Решение

Просто добавьте еще одну проверку и попробуйте использовать ->getPathname() вместо:

if($object->isDir() && strpos($object->getPathname(), '.') === false) {
// do some stuff
}

Это просто означает, что если это каталог И если путь не содержит этого .

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]