我正在使用 FilterIterator 过滤掉值并成功实现了accept()方法。但是我想知道如何在单次迭代中从我的接受方法中获取返回 false 的值。我们以下面的代码为例(取自php.net);
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;
}
}
在上面的代码中,它直接过滤掉了值,并返回了从 filteriterator 传递过来的值。实施为;
$array = array(
array('name' => 'Jonathan','id' => '5'),
array('name' => 'Abdul' ,'id' => '22')
);
$object = new ArrayObject($array);
$iterator = new UserFilter($object->getIterator(),'abdul');
它将仅包含名称为Jonathan的数组。但是我想知道是否可以使用相同的过滤器将名称为Abdul的对象存储在另一个变量中,并稍加添加,而不是重新实现整个过滤器来做相反的事情?我想的一种方法是完全复制粘贴 FilterIterator 并基本上更改true和false的值。但是,有什么巧妙的方法可以做到这一点,因为它需要在列表上进行另一次遍历。