Получить список подкаталогов указанного PATH на указанное количество дочерних каталогов

Я использую этот код, чтобы получить список подкаталогов.

<?php
$path = '/www/sites/';

$directory_iterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);

$iterator = new RecursiveIteratorIterator($directory_iterator,
RecursiveIteratorIterator::SELF_FIRST,
RecursiveIteratorIterator::CATCH_GET_CHILD);

foreach ($iterator as $file => $info) {
if ($info->isDir()) {
echo $file . "\n";
}
}
?>

Но это возвращает мне что-то вроде этого

/www/sites/000/4e7
/www/sites/000/4e7/.
/www/sites/000/4e7/..
/www/sites/000/4e7/mydomains.com
/www/sites/000/4e7/mydomains.com/.
/www/sites/000/4e7/mydomains.com/..
/www/sites/000/4e7/mydomains.com/web
/www/sites/000/4e7/mydomains.com/web/.
/www/sites/000/4e7/mydomains.com/web/..
/www/sites/000/4e7/mydomains.com/web/cgi-bin
/www/sites/000/4e7/mydomains.com/web/cgi-bin/.
/www/sites/000/4e7/mydomains.com/web/cgi-bin/..
/www/sites/000/4e7/mydomains.com/web/Resources
/www/sites/000/4e7/mydomains.com/web/Resources/.

Я указал корневой путь как /www/sites
Что мне нужно только в приведенном выше выводе

/www/sites/000/4e7/mydomains.com

Отдых для меня бесполезен. Это означает, что я хочу сканировать только 3 подкаталога по указанному пути. У меня есть тысячи тысяч подкаталогов, поэтому я хочу изменить текущий код, так как это занимает слишком много времени
Заранее спасибо.

0

Решение

использование DirectoryIterator :: isdot (), recursiveiteratoriterator :: getdepth (), например:

<?php
$path = '/www/sites/';

$directory_iterator = new RecursiveDirectoryIterator($path,RecursiveDirectoryIterator::KEY_AS_PATHNAME);

$iterator = new RecursiveIteratorIterator($directory_iterator,RecursiveIteratorIterator::SELF_FIRST,RecursiveIteratorIterator::CATCH_GET_CHILD);

foreach ($iterator as $file => $info) {
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Restrict to 3 levels only and ignore non-directory and dot files
if ($info->getDepth() >= 3 || !$info->isDir() || $info->isDot())
continue;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

echo $file . "\n";
}

Выход

/www/sites/000
/www/sites/000/4e7
/www/sites/000/4e7/mydomains.com
0

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

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

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