2013-02-24 68 views
1

我有以下幾點:PHP RecursiveIteratorIterator - 反向和計數結果

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

?> 

有人可以幫我嗎?

非常感謝提前!

回答

5

你需要的是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; 
    } 
} 
+0

令人驚歎,就是這樣!非常感謝! – BornKillaz 2013-02-24 19:02:38

+1

不客氣......查看您可以使用的可重複使用代碼的更新代碼 – Baba 2013-02-24 19:05:02