The FilterIterator class

(PHP 5 >= 5.1.0)

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

abstract FilterIterator extends IteratorIterator implements OuterIterator {
/* Methods */
public abstract bool accept ( void )
public __construct ( Iterator $iterator )
public mixed current ( void )
public Iterator getInnerIterator ( void )
public mixed key ( void )
public void next ( void )
public void rewind ( void )
public bool valid ( void )
}

Table of Contents

Коментарии

Автор:
The code below is a simple example of usage . Note that the method which does the actual job is accept. 

<?php
class 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.
2008-11-05 02:36:49
http://php5.kiev.ua/manual/ru/class.filteriterator.html
Автор:
A little test about the function call order:

<?php

class 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:

rewind
valid
key
accept

next
valid
key
accept

next
valid
key
accept

next
valid
2014-05-27 11:01:59
http://php5.kiev.ua/manual/ru/class.filteriterator.html
Автор:
Filter object collection by method:
<?php
/**
  * @method object current()
  */
class CollectionFilterIterator extends FilterIterator
{
     private 
$methodName;
     private 
$methodArguments;

     public function function 
__construct(Iterator $collectionstring $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);
     
}
}
?>
2021-12-28 01:15:21
http://php5.kiev.ua/manual/ru/class.filteriterator.html

    Поддержать сайт на родительском проекте КГБ