children = $children; } public function rewind() { $this->active = $this->children; $this->key = 0; foreach ( $this->active as $key => $it ) { $it->rewind(); if ( !$it->valid() ) { unset( $this->active[$key] ); } } } public function valid() { return (bool)$this->active; } public function next() { $this->key++; foreach ( $this->active as $key => $it ) { $it->next(); if ( !$it->valid() ) { unset( $this->active[$key] ); } } } public function current() { $result = []; foreach ( $this->active as $it ) { $result[] = $it->current(); } return $result; } public function key() { return $this->key; } public function hasChildren() { return (bool)$this->active; } public function getChildren() { // The NotRecursiveIterator is used rather than a RecursiveArrayIterator // so that nested arrays dont get recursed. return new EchoNotRecursiveIterator( new ArrayIterator( $this->current() ) ); } }