Bor*_*laz 1 php reverse object count
我有以下内容:
<?php
$path = '/home/user/test';
$dir = new RecursiveDirectoryIterator( $path );
$iterator = new RecursiveIteratorIterator( $dir );
$dir_iterator = new RegexIterator( $iterator, '/^.+\.php/i', RecursiveRegexIterator::GET_MATCH );
?>
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好,但我需要反转结果,归档与array_reverse()相同的效果
我试过这样,没有成功:
<?php
$dir_iterator = array_reverse( (array)$dir_iterator );
?>
Run Code Online (Sandbox Code Playgroud)
另外,我如何获得返回的结果数量?我试过这个,但是没有用:
<?php
$total_results = count( $dir_iterator );
?>
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?
提前谢谢了!
你需要的是iterator_to_array
你可以试试
$dir_iterator = array_reverse(iterator_to_array($dir_iterator ));
Run Code Online (Sandbox Code Playgroud)
计算迭代器你需要的是:
$total_results = iterator_count( $dir_iterator );
Run Code Online (Sandbox Code Playgroud)
更好的基石实施你的
$dir_iterator = new ReverseIterator($dir_iterator);
foreach ( $dir_iterator as $file ) {
// do your thing
}
// To get total
echo count($dir_iterator);
Run Code Online (Sandbox Code Playgroud)
使用的类
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;
}
}
Run Code Online (Sandbox Code Playgroud)