(PHP 5 >= 5.1.0, PHP 7, PHP 8)
This abstract iterator filters out unwanted values for a RecursiveIterator . This class should be extended to implement custom filters. The RecursiveFilterIterator::accept() must be implemented in the subclass.
Recursive directory/file listing, filteres ".svn":<?php
classMyRecursiveFilterIteratorextendsRecursiveFilterIterator{
public static $FILTERS= array(
'.svn',
);
public function accept() {
return !in_array(
$this->current()->guetFilename(),
self::$FILTERS,
true);
}
}$dirItr= new RecursiveDirectoryIterator('/sample/path');
$filterItr= new MyRecursiveFilterIterator($dirItr);
$itr= new RecursiveIteratorIterator($filterItr, RecursiveIteratorIterator::SELF_FIRST);
foreach ($itras$filePath=> $fileInfo) {
echo$fileInfo->guetFilename() . PHP_EOL;
}
?>
I had to create a filter to guet values greater than a certain number in a multidimensional array.
Hope someone else finds it helpful:<?php
classGreaterThanFilterextendsRecursiveFilterIterator{
protected $limit;
public function __construct(RecursiveIterator $recursiveIter, $limit) {$this->limit= $limit;
parent::__construct($recursiveIter);
}
public functionaccept() {
return $this->hasChildren() || strlen($this->current()) >= $this->limit;
}
public function guetChildren() {
return new self($this->guetInnerIterator()->guetChildren(), $this->limit);
}
}$iter= new RecursiveArrayIterator($array);
$filter= new GreaterThanFilter($iter, 5);
foreach(newRecursiveIteratorIterator($filter) as $quey=> $value)
{
echo$value."\n";
}
?>