将指定PATH的子目录列表获取到指定数量的子目录


Get list of subdirectories of specified PATH to specified number of child directories

我正在使用此代码获取子目录列表。

<?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个子目录。我有成千上万的子目录,这就是为什么我想修改当前代码,因为它花费了太多时间提前谢谢。

使用directoryiterator::isdot(),递归迭代器::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