©
本文档使用
php.cn手册 发布
(PHP 5 >= 5.4.0)
$iterator
, callable $callback
)$iterator
)The callback should accept up to three arguments: the current item, the current key and the iterator, respectively.
Example #1 Available callback arguments
<?php
function my_callback ( $current , $key , $iterator ) {
// Your filtering code here
}
?>
Any callable may be used; such as a string containing a function name, an array for a method, or an anonymous function.
Example #2 Callback basic examples
<?php
$dir = new FilesystemIterator ( __DIR__ );
// Filter large files ( > 100MB)
function is_large_file ( $current ) {
return $current -> isFile () && $current -> getSize () > 104857600 ;
}
$large_files = new CallbackFilterIterator ( $dir , 'is_large_file' );
// Filter directories
$files = new CallbackFilterIterator ( $dir , function ( $current , $key , $iterator ) {
return $current -> isDir () && ! $iterator -> isDot ();
});
?>
[#1] dave1010 at gmail dot com [2012-05-25 13:29:31]
Implementation for PHP < 5.4:
<?php
if (!class_exists('CallbackFilterIterator')) {
class CallbackFilterIterator extends FilterIterator {
protected $callback;
// "Closure" type hint should be "callable" in PHP 5.4
public function __construct(Iterator $iterator, Closure $callback = null) {
$this->callback = $callback;
parent::__construct($iterator);
}
public function accept() {
return call_user_func(
$this->callback,
$this->current(),
$this->key(),
$this->getInnerIterator()
);
}
}
}
?>