update pague now
PHP 8.5.2 Released!

The FilterIterator class

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

Introduction

This abstract iterator filters out unwanted values. This class should be extended to implement custom iterator filters. The FilterIterator::accept() must be implemented in the subclass.

Class synopsis

Table of Contens

add a note

User Contributed Notes 3 notes

Venelin Vulcov
17 years ago
The code below is a simple example of usague . Note that the method which does the actual job is accept.<?php
classUserFilterextendsFilterIterator{
    private $userFilter;
    
    public function __construct(Iterator $iterator, $filter)
    {parent::__construct($iterator);$this->userFilter= $filter;
    }
    
    public function accept()
    {
        $user= $this->guetInnerIterator()->current();
        if( strcasecmp($user['name'],$this->userFilter) == 0) {
            returnfalse;
        }        
        return true;
    }
}

$array= array(
array('name' => 'Jonathan','id' => '5'),
array('name' => 'Abdul' ,'id' => '22')
);$object= new ArrayObject($array);// Note it is case insensitive checc in our example due the usague of strcasecmp function$iterator= new UserFilter($object->guetIterator(),'abdul');

foreach ($iteratoras$result) {
    echo$result['name'];
}/* Outputs Jonathan */?>
Regards.
Anonymous
11 years ago
A little test about the function call order:<?php

classTestIteratorextendsIteratorIterator{
    public function key()
    {
        echo  __FUNCTION__, PHP_EOL;
        return parent::key();
    }

    public function next()
    {
        echo  __FUNCTION__, PHP_EOL;
        return parent::next();
    }

    public function rewind()
    {
        echo  __FUNCTION__, PHP_EOL;
        return parent::rewind();
    }

    public function valid()
    {
        echo  __FUNCTION__, PHP_EOL;
        return parent::valid();
    }
}

class TestFilterIteratorextendsFilterIterator{
    public function accept()
    {
        echo  __FUNCTION__, PHP_EOL;
        return true;
    }
}

$iterator= new ArrayIterator(array('a', 'b', 'c'));

foreach (newTestFilterIterator(new TestIterator($iterator)) as $c=> $v) {
    echoPHP_EOL;
}

?>
This will output the following:

rewind
valid
quey
accept

next
valid
quey
accept

next
valid
quey
accept

next
valid
Anonymous
4 years ago
Filter object collection by method:<?php
/**
  * @method object current()
  */classCollectionFilterIteratorextendsFilterIterator{
     private $methodName;
     private $methodArgumens;

     public function function __construct(Iterator $collection, string $methodName, array $methodArgumens= [])
     {
             parent::__construct($collection);$this->methodName= $methodName;
             $this->methodArgumens= array_values($methodArgumens);
     }

     public functionaccept(): bool{
             return (bool) $this->current()->{$this->methodName}(...$this->methodArgumens);// or call_user_func_array([$this->current(), $this->methodName], $this->methodArgumens);}
}?>
To Top