Bir şekilde ya da başka bir yineleyici sıralamak için kullanabilecekleri birden fazla seçenek vardır. En iyi seçenek, yineleyici yineleyici çıkmak istiyorum ne içeriği, ve aslında gerçekten istediğiniz nasıl yineleyici çok veya az / ihtiyacını işlemek istiyorum tam olarak nasıl bir hayli bağlı olacaktır.
Yaklaşımlar değişiklik olur; SplHeap
(veya Min
, Max
çeşitleri), SplPriorityQueue
(belki dosya boyutu gibi şeyler için) gibi ya da sadece sarma sınıfların yararlanarak ArrayObject
gibi bir şey sizin yineleyici kendi içeriğini sıralayabilirsiniz.
Ben bir örnek olarak SplHeap
kullanacağız. Eğer RecursiveDirectoryIterator
alfabetik ardından aşağıdaki gibi bir şey kullanılabilir tüm içeriğini düzenlemek istiyorum beri:
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;
}
Sıralamayı dosya ve klasörleri karıştırma, alfabetik:
./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