我有一个需要排序的FileSystemIterator 。
我使用uaSort函数iterator_to_array(new FileSystemIterator($dir, FilesystemIterator::SKIP_DOTS))
和以下排序函数:
function nameSort($a, $b) {
if($a->isDir() === $b->isDir()){
return strNatCaseCmp($a->getFilename(), $b->getFilename());
}
return $a->isDir() ? -1 : 1;
}
我在$dir中有 1063 个文件和目录,nameSort被调用了 11369 次,文件列表的平均生成时间约为 6 秒。我认为额外的测试项目是否是目录使uaSort调用nameSort更多次,但这个假设是错误的,因为当我删除带有isDir的行时,调用次数增加到 11957。运行时间却下降到 0.6 秒。
看起来调用isDir非常慢(它使列表慢了 10 倍)。我怎样才能加快速度?