> */ class LimitedCopyIterator extends \AppendIterator { private array $skipped = []; private array $copy = []; public function __construct(\Traversable $iterator, int $count, int $offset = 0) { parent::__construct(); if (!$iterator instanceof \Iterator) { $iterator = new \IteratorIterator($iterator); } $iterator = new \NoRewindIterator($iterator); $i = 0; while ($iterator->valid() && ++$i <= $offset) { $this->skipped[] = $iterator->current(); $iterator->next(); } while ($iterator->valid() && count($this->copy) < $count) { $this->copy[] = $iterator->current(); $iterator->next(); } $this->append(new \ArrayIterator($this->skipped)); $this->append($this->getRequestedItems()); $this->append($iterator); } public function getRequestedItems(): \Iterator { return new \ArrayIterator($this->copy); } }