_path = $path; $this->_target = $target; $this->_values = $values; } /** * Advances the cursor to the next record * * @return void */ public function next() { parent::next(); if ($this->_validValues) { $this->_values->next(); } $this->_validValues = $this->_values->valid(); } /** * Returns the current element in the target collection after inserting * the value from the source collection into the specified path. * * @return mixed */ public function current() { $row = parent::current(); if (!$this->_validValues) { return $row; } $pointer =& $row; foreach ($this->_path as $step) { if (!isset($pointer[$step])) { return $row; } $pointer =& $pointer[$step]; } $pointer[$this->_target] = $this->_values->current(); return $row; } /** * Resets the collection pointer. * * @return void */ public function rewind() { parent::rewind(); $this->_values->rewind(); $this->_validValues = $this->_values->valid(); } }