Có nhiều tùy chọn khả dụng, bạn có thể sử dụng tùy chọn này để sắp xếp trình lặp trong cách này hay cách khác. Tùy chọn tốt nhất sẽ phụ thuộc rất nhiều vào chính xác cách bạn muốn thao tác nội dung của trình vòng lặp, những gì bạn muốn thoát khỏi trình vòng lặp và thực sự là bao nhiêu hay ít của trình lặp mà bạn thực sự muốn/cần.
Phương pháp tiếp cận sẽ thay đổi; sử dụng các lớp như SplHeap
(hoặc Min
, Max
giống), SplPriorityQueue
(có thể cho những thứ như kích thước tệp) hoặc chỉ gói trình lặp của bạn theo thứ gì đó như ArrayObject
có thể sắp xếp nội dung của riêng nó.
Tôi sẽ sử dụng ví dụ SplHeap
. Vì bạn muốn sắp xếp toàn bộ nội dung của RecursiveDirectoryIterator
theo thứ tự abc sau đó một cái gì đó như sau có thể được sử dụng:
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;
}
Trình tự sắp xếp là chữ cái, pha trộn các file và thư mục:
./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
có thể trùng lặp của [sau khi sử dụng $ files = new DirectoryIterator() trong PHP, làm thế nào để bạn sắp xếp các mục?] (Http://stackoverflow.com/questions/1076881/after-using-files-new-directoryiterator-in- php-how-do-you-sort-the-items) –
[salathe/spl-ví dụ - Phân loại Iterators] (https://github.com/salathe/spl-examples/wiki/Sorting-Iterators) – hakre