質問

PHPでイテレータを並べ替える簡単な方法はあります(配列にすべてを引っ張って並べ替える必要はありません)。

私が持っている特定の例は DirectoryIterator ですが、一般的な解決策があると便利ですイテレータ。

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

これらをさまざまな基準(ファイル名、サイズなど)でソートできるようにしたい

役に立ちましたか?

解決

それを行う方法はありません。イテレータは「反復」する必要があります。リストを介して。必要な動作を実現するには、基になるリストを並べ替える必要があります。

ところで、SPLへのより完全なリファレンスはこちらです: http://www.php.net/~helly/php/ext/spl/

他のヒント

5年後にここに来る人のために:

イテレータをArrayIteratorの拡張にすると、使用できます

ArrayIterator :: uasort(値でソートする)およびArrayIterator :: uksort(キーでソートする)

http://php.net/manual/en/arrayiterator.uasort.php

http://php.net/manual/en/arrayiterator.uksort.php

iterator_to_array()を使用してからuasort()を使用して削減する必要があります。そして、私のパフォーマンステストでは、十分に高速です。

あなたの特定の例について、イテレータを使用して知っている最もコンパクトな方法は次のとおりです:

// 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());'));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top