PHP RecursiveIteratorIterator - 反向和计数结果

时间:2013-02-24 18:41:25

标签: php object count reverse

我有以下内容:

<?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 );

?>

有人可以帮帮我吗?

非常感谢提前!

1 个答案:

答案 0 :(得分:5)

您需要的是iterator_to_array,您可以尝试

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

计算迭代器你需要的是:

$total_results = iterator_count( $dir_iterator );

Better Sill实施你的

$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;
    }
}