【发布时间】:2013-05-05 16:18:31
【问题描述】:
我有一个需要排序的 FileSystemIterator。
我在iterator_to_array(new FileSystemIterator($dir, FilesystemIterator::SKIP_DOTS)) 上使用 uaSort 函数,并带有以下排序函数:
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 倍)。如何加快速度?
【问题讨论】:
标签: php performance sorting iterator