DirectoryIterator ile dosyaları sıralama

2 Cevap php

Ben lighttpd için bir dizin listesi PHP5 senaryoyu yapıyorum. Belirli bir dizinde, ben (bilgiler) ile doğrudan alt dizinleri ve dosyaları listelemek mümkün olmak istiyorum.

Hızlı bir arama sonrasında, DirectoryIterator arkadaşım gibi görünüyor:

foreach (new DirectoryIterator('.') as $file)
{
    echo $file->getFilename() . '<br />';
}

ama dosya adı, tarih, mim tipleri ... vb dosyaları sıralamak mümkün istiyorum

(DiziNesnesi / ArrayIterator? Ile) bunu nasıl?

Teşekkürler

2 Cevap

Çözümü yukarıda benim için işe yaramadı. İşte önermek ne:

class SortableDirectoryIterator implements IteratorAggregate
{

    private $_storage;

    public function __construct($path)
    {
    $this->_storage = new ArrayObject();

    $files = new DirectoryIterator($path);
    foreach ($files as $file) {
        $this->_storage->offsetSet($file->getFilename(), $file->getFileInfo());
    }
    $this->_storage->uksort(
        function ($a, $b) {
            return strcmp($a, $b);
        }
    );
    }

    public function getIterator()
    {
    return $this->_storage->getIterator();
    }

}

Philipp W. burada iyi bir örnek gönderdi: http://php.oregonstate.edu/manual/en/directoryiterator.isfile.php

function cmpSPLFileInfo( $splFileInfo1, $splFileInfo2 )
{
    return strcmp( $splFileInfo1->getFileName(), $splFileInfo2->getFileName() );
}

class DirList extends RecursiveDirectoryIterator
{
    private $dirArray;

    public function __construct( $p )
    {
        parent::__construct( $p );
        $this->dirArray = new ArrayObject();
        foreach( $this as $item )
        {
            $this->dirArray->append( $item );
        }
        $this->dirArray->uasort( "cmpSPLFileInfo" );
    }

    public function getIterator()
    {
        return $this->dirArray->getIterator();
    }

}