我正在使用RecursiveDirectoryIterator
和RecursiveIteratorIterator
来构建一个文件列表树,代码如下。我需要对列表进行排序--或者按目录的字母顺序排序,或者只按字母顺序排序。
谁能告诉我如何对文件列表进行排序?
$dir_iterator = new RecursiveDirectoryIterator($groupDirectory);
$iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
// do stuff with $file
}
4条答案
按热度按时间ojsjcaue1#
有多种选项可供选择,您可以使用这些选项以某种方式对迭代器进行排序,最佳选项在很大程度上取决于您希望如何操作迭代器内容、您希望从迭代器中得到什么以及您真正想要/需要多少迭代器。
办法各不相同;使用
SplHeap
(或Min
、Max
变体)、SplPriorityQueue
(可能用于文件大小)等类,或者只是将迭代器 Package 在ArrayObject
等可以对自己的内容进行排序的类中。我将以
SplHeap
为例,因为您希望按字母顺序排列RecursiveDirectoryIterator
的全部内容,所以可以使用如下代码:排序顺序按字母顺序排列,混合文件和文件夹:
wlzqhblo2#
使用迭代器本身是不可能的,我在SO上的某个地方看到了
Iterator
类的扩展,它做了排序,但我模糊地记得在使用它时遇到了麻烦。也许this question的答案有帮助,即使它们指向迭代器之外?
更新:Here是对您的问题的一个复制,有一些答案--尽管没有多少答案!
elcex8rz3#
Sönke Ruempler有一个很好的解决方案:
来源:https://ruempler.eu/2008/08/09/php-sortingiterator/
yzckvree4#
滑稽的方式: