PHP Yineleyicilerde sıralama

2 Cevap php

(Sadece bir diziye tüm çekerek ve bu sıralama olmadan) PHP bir yineleyici sıralamak için basit bir yolu var mı.

Ben spesifik örnek bir DirectoryIterator ama herhangi bir yineleyici genel bir çözüm olması güzel olurdu.

$dir = new DirectoryIterator('.');
foreach ($dir as $file)
    echo $file->getFilename();

Ben çeşitli kriterlere (dosya adı, boyutu, vb) bu ​​sıralamak mümkün istiyorum

2 Cevap

Bunu yapmak için hiçbir yolu yoktur. Bir yineleyici listesi üzerinden "yineleme" olmalıdır. Sen gerekli davranış elde etmek için altta yatan listeyi sıralamak gerekiyor.

By the way, the more complete reference to the SPL is here: http://www.php.net/~helly/php/ext/spl/

Sen iterator_to_array kullanarak azaltmak gerekir () sonra uasort (). Ve benim performans test, yeterince hızlı.

Özel örneğe, ben yineleyicileri kullanarak biliyorum en kompakt yolu aşağıdaki gibidir:

// get (recursively) files matching a pattern, each file as SplFileInfo object
$matches = new RegexIterator(
               new RecursiveIteratorIterator(
                   new RecursiveDirectoryIterator('/path/to/files/')
               ),
               '/(\.php|\.ini|\.xml)$/i'
            );
 $files = iterator_to_array($matches);

// sort them by name
uasort($files, create_function('$a,$b', 'return strnatcasecmp($a->getFilename(), $b->getFilename());'));