gpt4 book ai didi

php - 使用 RecursiveDirectoryIterator 对目录列表进行排序

转载 作者:IT王子 更新时间:2023-10-29 00:11:38 25 4
gpt4 key购买 nike

我正在使用 RecursiveDirectoryIteratorRecursiveIteratorIterator 使用如下代码构建文件列表树。我需要对列表进行排序 - 目录然后按字母顺序排列文件,或者仅按字母顺序排列。

谁能告诉我如何对文件列表进行排序?

$dir_iterator = new RecursiveDirectoryIterator($groupDirectory);
$iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
// do stuff with $file
}

最佳答案

有多个选项可用,您可以使用它们以一种或另一种方式对迭代器进行排序。最佳选择在很大程度上取决于您想要如何操作迭代器内容、您想从迭代器中获得什么以及您真正想要/需要多少迭代器。

方法会有所不同;利用 SplHeap(或 MinMax 品种)、SplPriorityQueue(可能用于文件大小之类的东西) ) 或者只是将迭代器包装在类似 ArrayObject 的东西中,它可以对自己的内容进行排序。

我将使用 SplHeap 作为示例。由于您想按字母顺序排列 RecursiveDirectoryIterator 的全部内容,因此可以使用如下内容:

class ExampleSortedIterator extends SplHeap
{
public function __construct(Iterator $iterator)
{
foreach ($iterator as $item) {
$this->insert($item);
}
}
public function compare($b,$a)
{
return strcmp($a->getRealpath(), $b->getRealpath());
}
}

$dit = new RecursiveDirectoryIterator("./path/to/files");
$rit = new RecursiveIteratorIterator($dit);
$sit = new ExampleSortedIterator($rit);
foreach ($sit as $file) {
echo $file->getPathname() . PHP_EOL;
}

排序顺序是字母顺序,混合文件和文件夹:

./apple
./apple/alpha.txt
./apple/bravo.txt
./apple/charlie.txt
./artichoke.txt
./banana
./banana/aardvark.txt
./banana/bat.txt
./banana/cat.txt
./beans.txt
./carrot.txt
./cherry
./cherry/amy.txt
./cherry/brian.txt
./cherry/charlie.txt
./damson
./damson/xray.txt
./damson/yacht.txt
./damson/zebra.txt
./duck.txt

关于php - 使用 RecursiveDirectoryIterator 对目录列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com