Sco*_*ers 13 php sorting recursion spl
我正在使用RecursiveDirectoryIterator并RecursiveIteratorIterator使用如下代码构建文件列表树.我需要对列表进行排序 - 按字母顺序排列目录,或按字母顺序排列.
谁能告诉我如何对文件列表进行排序?
$dir_iterator = new RecursiveDirectoryIterator($groupDirectory);
$iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
// do stuff with $file
}
Run Code Online (Sandbox Code Playgroud)
sal*_*the 24
有多个选项可用,您可以使用这些选项以某种方式对迭代器进行排序.最好的选择很大程度上取决于你想要如何操作迭代器内容,你想要从迭代器中得到什么,以及你真正想要/需要多少或多少迭代器.
方法会有所不同; 利用像类SplHeap(或Min,Max品种),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;
}
Run Code Online (Sandbox Code Playgroud)
排序顺序是按字母顺序排列的,混合文件和文件夹:
./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
Run Code Online (Sandbox Code Playgroud)