获取迭代器中项目数的最快方法是什么?

时间:2016-03-20 12:04:59

标签: php iterator

我的文件夹结构中包含超过300.000个文件和文件夹。

当我遍历此结构以获取某种类型的所有文件时,这需要大约半秒才能完成:

$path = "/path/to/folder";

$folder = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($folder);

$files = new RegexIterator($iterator, '/^.+\.jpg$/i', RecursiveRegexIterator::GET_MATCH);

但是获得生成的迭代器($ files)的长度大约需要十秒:

$n = iterator_count($files);

是否有更快的方法来获取迭代器中的项目数?也许在迭代期间?

这些也需要大约10秒钟:

1。 find(命令行)

find /path/to/folder -type f | wc -l

2。 scandir(PHP,source

$intFileCount = countFilesInDirectory($path, array('jpg'));
echo $intFileCount;
function countFilesInDirectory($strPathToDirectory, $arrExtensions) {
    $intFileCount = 0;
    $arrFiles = scandir($strPathToDirectory);
    foreach($arrFiles as $strFile) {
        if('.' != $strFile && '..' != $strFile) {
            if(is_dir("$strPathToDirectory/$strFile") && is_readable("$strPathToDirectory/$strFile")) {
                $intFileCount += countFilesInDirectory("$strPathToDirectory/$strFile", $arrExtensions);
            } else {
                $arrFileInfo = pathinfo($strFile);
                if(in_array($arrFileInfo['extension'], $arrExtensions)) {
                    $intFileCount += 1;
                }
            }
        }
    }
    return $intFileCount;
}

注意:

我正在计算脑中的秒数。因此,方法之间可能会有一些细微的差别,但它并不大到与我相关。

0 个答案:

没有答案