A classe FilterIterator

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

Introdução

Este iterador abstrato filtra os valores indesejados. Esta classe deve ser estendida para implementar filtros de iterador personalizados. O FilterIterator::accept() deve ser implementado na subclasse.

Resumo da classe

abstract class FilterIterator extends IteratorIterator {
/* Métodos */
public __construct(Iterator $iterator)
public accept(): bool
public current(): mixed
public key(): mixed
public next(): void
public rewind(): void
public valid(): bool
/* Métodos herdados */
}

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês) 3 notes

up
23
Venelin Vulkov
16 years ago
The code below is a simple example of usage . Note that the method which does the actual job is accept. <?phpclass UserFilter extends FilterIterator {    private $userFilter;        public function __construct(Iterator $iterator , $filter )    {        parent::__construct($iterator);        $this->userFilter = $filter;    }        public function accept()    {        $user = $this->getInnerIterator()->current();        if( strcasecmp($user['name'],$this->userFilter) == 0) {            return false;        }                return true;    }}$array = array(array('name' => 'Jonathan','id' => '5'),array('name' => 'Abdul' ,'id' => '22'));$object = new ArrayObject($array);// Note it is case insensitive check in our example due the usage of strcasecmp function$iterator = new UserFilter($object->getIterator(),'abdul');foreach ($iterator as $result) {    echo $result['name'];}/* Outputs Jonathan */?>Regards.
up
6
Anonymous
11 years ago
A little test about the function call order:<?phpclass TestIterator extends IteratorIterator{    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 TestFilterIterator extends FilterIterator{    public function accept()    {        echo  __FUNCTION__, PHP_EOL;        return true;    }}$iterator = new ArrayIterator(array('a', 'b', 'c'));foreach (new TestFilterIterator(new TestIterator($iterator)) as $k => $v) {    echo PHP_EOL;}?>This will output the following:rewindvalidkeyacceptnextvalidkeyacceptnextvalidkeyacceptnextvalid
up
-1
Anonymous
3 years ago
Filter object collection by method:<?php/**  * @method object current()  */class CollectionFilterIterator extends FilterIterator{     private $methodName;     private $methodArguments;     public function function __construct(Iterator $collection, string $methodName, array $methodArguments = [])     {             parent::__construct($collection);             $this->methodName = $methodName;             $this->methodArguments = array_values($methodArguments);     }     public function accept(): bool     {             return (bool) $this->current()->{$this->methodName}(...$this->methodArguments);             // or call_user_func_array([$this->current(), $this->methodName], $this->methodArguments);     }}?>
To Top