вернуть все уникальные каталоги в иерархии

я использую RecursiveDirectoryIterator сканировать все файлы и папки в данном корневом каталоге. Это прекрасно работает, но я бы хотел отслеживать все уникальный каталоги в этом списке, так что я не уверен, что RecursiveDirectoryIterator это путь.

У меня есть структура каталогов

-a
->b
->c
-one
->two
->three

Вот мой код:

<?php

function test($dir){

$in_dir = 'none';
$currdir = 'none';

$thisdir = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($thisdir, RecursiveIteratorIterator::SELF_FIRST);

foreach($files as $object){
//if this is a directory... find out which one it is.
if($object->isDir()){

//figure out if we have changed directories...
$currdir = realpath($object->getPath());

if(strpos($currdir, '.') == false){
$test = strcmp($currdir, $prevdir);
if($test){
echo "current dir changing: ", $currdir, "\n";
$prevdir = $currdir;
}
}
}
}
}

test('fold');
?>

Из этого я получаю следующее:

current dir changing: /Users/<usr>/Desktop/test/fold

current dir changing: /Users/<usr>/Desktop/test/fold/a

current dir changing: /Users/<usr>/Desktop/test/fold/a/b

current dir changing: /Users/<usr>/Desktop/test/fold

current dir changing: /Users/<usr>/Desktop/test/fold/one

current dir changing: /Users/<usr>/Desktop/test/fold/one/two

…Но я хочу только уникальный каталоги.

0

Решение

Возможно, это метод сравнения объектов в цикле, который возвращает дубликаты, поскольку итератор перемещается вверх и вниз по дереву каталогов, когда он анализирует папки.

Следующее сработало для меня. Я также использую array_unique() Подтвердите отсутствие дубликатов в качестве избыточности.

$dirArray = []; // the array to store dirs
$path = realpath('/some/folder/location');

$objects = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST
);

// loop through all objects and store names in dirArray[]
foreach($objects as $name => $object){
if ($object->isDir()) {
$dirArray[] = $name;
}
}

// make sure there are no dupes
$result = array_unique($dirArray);

// print array out
print_r($result);
1

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

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

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