3

私は次のものを持っています:

<?php

$path = '/home/user/test';

$dir = new RecursiveDirectoryIterator( $path  );
$iterator = new RecursiveIteratorIterator( $dir );
$dir_iterator = new RegexIterator( $iterator, '/^.+\.php/i', RecursiveRegexIterator::GET_MATCH );

?>

これまでのところ良いですが、array_reverse()と同じ効果をアーカイブするために、結果を逆にする必要があります

私はこのように試しましたが、成功しませんでした:

<?php

$dir_iterator = array_reverse( (array)$dir_iterator );

?>

また、返される結果の数を取得するにはどうすればよいですか?私はこれを試しましたが、機能していません:

<?php

$total_results = count( $dir_iterator );

?>

誰かが私を助けることができますか?

よろしくお願いします!

4

1 に答える 1

9

あなたが必要なのはiterator_to_arrayあなたが試すことができるということです

$dir_iterator =  array_reverse(iterator_to_array($dir_iterator ));

イテレータを数えるために必要なものは次のとおりです。

$total_results = iterator_count( $dir_iterator );

より良い敷居はあなたを実装します

$dir_iterator = new ReverseIterator($dir_iterator);

foreach ( $dir_iterator as $file ) {
    // do your thing
}

// To get total
echo count($dir_iterator);

使用したクラス

class ReverseIterator extends ArrayIterator implements Countable {
    private $t;

    public function __construct(Iterator $it) {
        $r = array_reverse(iterator_to_array($it));
        $this->t = count($r);
        parent::__construct($r);
        unset($r);
    }

    function count() {
        return $this->t;
    }
}
于 2013-02-24T18:51:27.640 に答える