/** * Get the recursive iterator * * @param integer $max_level The maximum allowed level. 0 is used for any level * @param integer $parent The key of the parent to start recursing from. 0 is used for the top level * @return DatabaseIteratorRecursive * @throws \OutOfBoundsException If a parent key is specified that doesn't exist. */ public function getRecursiveIterator($max_level = 0, $parent = 0) { if ($parent > 0 && !$this->__nodes->find($parent)) { throw new \OutOfBoundsException('Parent does not exist'); } //If the parent doesn't have any children create an empty rowset if (isset($this->__children[$parent])) { $config = array('data' => $this->__children[$parent]); } else { $config = array(); } $iterator = new DatabaseIteratorRecursive($this->getTable()->createRowset($config), $max_level); return $iterator; }
/** * Create a recursive iterator from a rowset * * @param DatabaseRowsetInterface $rowset * @return \RecursiveIterator */ protected static function _createInnerIterator(DatabaseRowsetInterface $rowset) { $iterator = new \RecursiveArrayIterator($rowset->getIterator()); $iterator = new \RecursiveCachingIterator($iterator, \CachingIterator::TOSTRING_USE_KEY); return $iterator; }