A very useful use case for RecusiveIteratorIterator in combination with RecursiveArrayIterator is to replace array values on a multidimensional array at any level deep.Usually, array_walk_recursive would be used to replace values deep within arrays, but unfortunately this only works when there is a standard key value pair - in other words, array_walk_recursive ONLY VISITS LEAF NODES, NOT arrays.So to get around this, the iterators can be used in this way:<?php$array = [ 'test' => 'value', 'level_one' => [ 'level_two' => [ 'level_three' => [ 'replace_this_array' => [ 'special_key' => 'replacement_value', 'key_one' => 'testing', 'key_two' => 'value', 'four' => 'another value' ] ], 'ordinary_key' => 'value' ] ]];$arrayIterator = new \RecursiveArrayIterator($array);$recursiveIterator = new \RecursiveIteratorIterator($arrayIterator, \RecursiveIteratorIterator::SELF_FIRST);foreach ($recursiveIterator as $key => $value) { if (is_array($value) && array_key_exists('special_key', $value)) { $replaced = array_fill(0, count($value), $value['special_key']); $value = array_combine(array_keys($value), $replaced); $value['new_key'] = 'new value'; $currentDepth = $recursiveIterator->getDepth(); for ($subDepth = $currentDepth; $subDepth >= 0; $subDepth--) { $subIterator = $recursiveIterator->getSubIterator($subDepth); $subIterator->offsetSet($subIterator->key(), ($subDepth === $currentDepth ? $value : $recursiveIterator->getSubIterator(($subDepth+1))->getArrayCopy())); } }}return $recursiveIterator->getArrayCopy();$array = [ 'test' => 'value', 'level_one' => [ 'level_two' => [ 'level_three' => [ 'replace_this_array' => [ 'special_key' => 'replacement_value', 'key_one' => 'replacement_value', 'key_two' => 'replacement_value', 'four' => 'replacement_value', 'new_key' => 'new value' ] ], 'ordinary_key' => 'value' ] ]];?>The key is in traversing back up the tree to save the changes at that level - simply calling $recursiveIterator->offsetSet(); will only set a key on the root array.