offsetSet($index, $newval) will change an existing cache value or create a new cache entry<?php $cache = new \CachingIterator( new \ArrayIterator(['a', 'b', 'c', 'd']), \CachingIterator::FULL_CACHE); $shortRange = range(0, 1); foreach ($shortRange as $index) { $cache->next(); } echo PHP_EOL . 'The cache' . PHP_EOL; var_export($cache->getCache()); echo PHP_EOL; echo $cache->offsetSet('0', 'manual change') . PHP_EOL; echo $cache->offsetSet('3', 'manual entry') . PHP_EOL;?>The cachearray ( 0 => 'a', 1 => 'b',)The cachearray ( 0 => 'manual change', 1 => 'b', 3 => 'manual entry',)There is no requirement that the offset exist in the inner iterator, or that the offset exists in the cache.<?php $cache = new \CachingIterator( new \ArrayIterator([]), \CachingIterator::FULL_CACHE); echo $cache->offsetSet('22', 'manual entry') . PHP_EOL; echo PHP_EOL . 'The cache' . PHP_EOL; var_export($cache->getCache()); echo PHP_EOL; print_r("cache offset '22' " . ($cache->offsetExists('22') == 1 ? 'exists' : "doesn't exist" ) . PHP_EOL);?>The cachearray ( 22 => 'manual entry',)cache offset '22' exists