/** * Returns whether or not the iterator has more elements * * @return bool */ public function valid() { if ($this->_buffer->offsetExists($this->_index)) { $current = $this->_buffer->offsetGet($this->_index); $this->_current = $current['value']; $this->_key = $current['key']; return true; } $valid = parent::valid(); if ($valid) { $this->_current = parent::current(); $this->_key = parent::key(); $this->_buffer->push(['key' => $this->_key, 'value' => $this->_current]); } $this->_finished = !$valid; return $valid; }