0

ソートする必要がある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 秒で生成されます。item がディレクトリであるかどうかをさらにテストすることで、uaSortがnameSortをより多く呼び出すようになったと思いましたが、この仮定は間違っていました。

isDirの呼び出しが非常に遅いようです (リストが 10 倍遅くなります)。どうすればこれをスピードアップできますか?

4

2 に答える 2

2

呼び出しisDirが非常にコストがかかり、パスごとに複数回呼び出す場合は、何かがディレクトリである場合はキャッシュし、最初にキャッシュから取得することをお勧めします。isDirこれにより、メソッドへの多くの呼び出しを安全に行うことができます。

于 2013-05-10T22:09:18.217 に答える