VOOZH about

URL: https://www.php.net/manual/en/class.recursivefilteriterator.php

⇱ PHP: RecursiveFilterIterator - Manual


RecursiveFilterIterator::__construct »
« RecursiveDirectoryIterator::rewind

The RecursiveFilterIterator class

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

Introduction

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.

Class synopsis

abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator {
/* Methods */
public function __construct(RecursiveIterator $iterator)
public function hasChildren(): bool
/* Inherited methods */
public function FilterIterator::accept(): bool
public function FilterIterator::current(): mixed
public function FilterIterator::key(): mixed
public function FilterIterator::next(): void
public function FilterIterator::rewind(): void
public function FilterIterator::valid(): bool
public function IteratorIterator::current(): mixed
public function IteratorIterator::key(): mixed
public function IteratorIterator::next(): void
public function IteratorIterator::rewind(): void
public function IteratorIterator::valid(): bool
}

Table of Contents

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
add a note

User Contributed Notes 2 notes

up
7
lemats
15 years ago
Recursive directory/file listing, filteres ".svn":

<?php

class MyRecursiveFilterIterator extends RecursiveFilterIterator {

 public static $FILTERS = array(
 '.svn',
 );

 public function accept() {
 return !in_array(
 $this->current()->getFilename(),
 self::$FILTERS,
 true
 );
 }

}

$dirItr = new RecursiveDirectoryIterator('/sample/path');
$filterItr = new MyRecursiveFilterIterator($dirItr);
$itr = new RecursiveIteratorIterator($filterItr, RecursiveIteratorIterator::SELF_FIRST);
foreach ($itr as $filePath => $fileInfo) {
 echo $fileInfo->getFilename() . PHP_EOL;
}

?>
up
4
Russell Dias
15 years ago
I had to create a filter to get values greater than a certain number in a multidimensional array.

Hope someone else finds it helpful:

<?php
class GreaterThanFilter extends RecursiveFilterIterator {
 protected $limit;

 public function __construct(RecursiveIterator $recursiveIter, $limit) {
 $this->limit = $limit;
 parent::__construct($recursiveIter);
 }
 public function accept() {
 return $this->hasChildren() || strlen($this->current()) >= $this->limit;
 }
 public function getChildren() {
 return new self($this->getInnerIterator()->getChildren(), $this->limit);
 }
}
$iter = new RecursiveArrayIterator($array);
$filter = new GreaterThanFilter($iter, 5);

foreach(new RecursiveIteratorIterator($filter) as $key => $value)
{
 echo $value . "\n";
}
?>
add a note
👁 To Top
and to navigate • to select • to close • to open
Press without selection to search using Google