Класс RecursiveFilterIterator
(PHP 5 >= 5.1.0, PHP 7)
Введение
Этот абстрактный итератор отфильтровывает нежелательные значения для RecursiveIterator. Этот класс следует расширять для реализации пользовательских фильтров. Метод RecursiveFilterIterator::accept() необходимо реализовывать в подклассе.
Обзор классов
abstract
RecursiveFilterIterator
extends
FilterIterator
implements
OuterIterator
,
RecursiveIterator
{
/* Методы */
/* Наследуемые методы */
}Содержание
- RecursiveFilterIterator::__construct — Создает объект RecursiveFilterIterator на основе объекта-итератора RecursiveIterator
- RecursiveFilterIterator::getChildren — Возвращает дочерние элементы внутреннего итератора в виде объекта RecursiveFilterIterator
- RecursiveFilterIterator::hasChildren — Проверяет, есть ли у текущего элемента внутреннего итератора дочерние элементы
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Стандартная библиотека PHP (SPL)
- Класс AppendIterator
- Класс ArrayIterator
- Класс CachingIterator
- Класс CallbackFilterIterator
- Класс DirectoryIterator
- Класс EmptyIterator
- Класс FilesystemIterator
- Класс FilterIterator
- Класс GlobIterator
- Класс InfiniteIterator
- Класс IteratorIterator
- Класс LimitIterator
- Класс MultipleIterator
- Класс NoRewindIterator
- Класс ParentIterator
- Класс RecursiveArrayIterator
- Класс RecursiveCachingIterator
- Класс RecursiveCallbackFilterIterator
- Класс RecursiveDirectoryIterator
- Класс RecursiveFilterIterator
- Класс RecursiveIteratorIterator
- Класс RecursiveRegexIterator
- Класс RecursiveTreeIterator
- Класс RegexIterator
Коментарии
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";
}
?>
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;
}
?>