略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: RecursiveFilterIterator

2024-04-27

The RecursiveFilterIterator class

(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.

类摘要

abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator {
/* 方法 */
public __construct(RecursiveIterator $iterator)
public hasChildren(): bool
/* 继承的方法 */
public FilterIterator::accept(): bool
public FilterIterator::next(): void
public FilterIterator::rewind(): void
public FilterIterator::valid(): bool
public IteratorIterator::next(): void
}

目录

add a noteadd a note

User Contributed Notes 2 notes

up
8
lemats
11 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
3
Russell Dias
11 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";
}
?>

官方地址:https://www.php.net/manual/en/class.recursivefilteriterator.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3