首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用额外的参数从扩展的RecursiveIterator循环RecursiveIteratorIterator

使用额外的参数从扩展的RecursiveIterator循环RecursiveIteratorIterator
EN

Stack Overflow用户
提问于 2012-02-09 00:47:32
回答 1查看 695关注 0票数 2

假设我已经关注了ArrayObject

代码语言:javascript
复制
$array_object = new ArrayObject(array(
   array('1', '2', '3', '4'),
   array('3', '6', '7', '8'),
   array('9', '3', '11', '12'),
));

我扩展了RecursiveFilterIterator,使其只接受值等于参数中传递的某个值的子元素:

代码语言:javascript
复制
class myRecursiveFilterIterator extends RecursiveFilterIterator
{
   public $value;

   public function __construct($it, $value)
   {
      parent::__construct($it);
      $this->value = $value;
   }

   public function accept()
   {
      return (parent::hasChildren()) || (parent::current() == $this->value);
   }
}

我创建了这个全新迭代器的实例,以筛选等于3的值:

代码语言:javascript
复制
$recursive_filter_iterator = new myRecursiveFilterIterator(new RecursiveArrayIterator($array_object), 3);

如果现在我使用RecursiveIteratorIterator循环整个myRecursiveFilterIterator

代码语言:javascript
复制
foreach (new RecursiveIteratorIterator($recursive_filter_iterator) as $value) {
   var_dump($value);
}

我收到以下警告:

代码语言:javascript
复制
Warning: Missing argument 2 for myRecursiveFilterIterator::__construct() in /my/path/test.php on line myLine Notice: Undefined variable: value in /my/path/test.php on line myOtherLine

这就像循环RecursiveIteratorIterator在不传递第二个参数$value的情况下实例化myRecursiveFilterIterator一样.

如果我在不提供额外参数的情况下扩展FilterIterator,就不会发生这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-17 15:38:52

我决定自己运行这个脚本,下面是我注意到的

你正在处理多个数组,所以parent::current()可以是一个数组,这意味着下面的行是错误的,因为$this->value是一个整数。

$this->value);

  • $this->current () (parent::hasChildren()) || (parent::current() == return还会将字符串切换为数组您可以执行此操作来管理这两者,具体取决于您想要实现的目标

如果(is_array ( $current )) { return ($this->hasChildren ()) || (in_array (( string ) $this->value,$this->current ( );} else { //var_dump ( $this->value,$this->current ();return ($this->hasChildren ()) || ( $this->value == $this->current ());}

  • 您还需要实现getChildren方法,这就是为什么

抱怨myRecursiveFilterIterator::__construct()缺少参数2的原因

公共函数getChildren() { return new self ( $this->getInnerIterator ()->getChildren (),$this->value );}

==============================放弃旧的响应=============================

PHP大多数人都传达了错误的错误消息。您的代码没有问题,但是错误是在您尝试将foreach直接与RecursiveIteratorIterator一起使用时产生的

以下是使用RecursiveArrayIterator封装RecursiveIteratorIterator的一种更好的方法:

代码语言:javascript
复制
foreach (new RecursiveArrayIterator(new RecursiveIteratorIterator($recursive_filter_iterator)) as $value) {
    var_dump($value);
} 

:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9197726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档