RecursiveArrayIterator::getChildrens returns a copy of the children, not a reference:<?php$stack = array ("some" => "value", array ("subsome" => "subvalue", array ("subsubsome" => "subsubvalue")), "some1" => "value1");$object = new RecursiveArrayIterator ($stack);$object->next ();$second_object = &$object->getChildren ();$second_object->next ();$third_object = &$second_object->getChildren ();$third_object->offsetSet ("subsubsome", "subsubdiferent");var_dump ($object);var_dump ($second_object);var_dump ($third_object);?>returns: object(RecursiveArrayIterator)#1 (1) { ["storage":"ArrayIterator":private]=> array(3) { ["some"]=> string(5) "value" [0]=> array(2) { ["subsome"]=> string(8) "subvalue" [0]=> array(1) { ["subsubsome"]=> string(11) "subsubvalue" <--- expected to be changed } } ["some1"]=> string(6) "value1" }}object(RecursiveArrayIterator)#2 (1) { ["storage":"ArrayIterator":private]=> array(2) { ["subsome"]=> string(8) "subvalue" [0]=> array(1) { ["subsubsome"]=> string(11) "subsubvalue" <--- expected to be changed } }}object(RecursiveArrayIterator)#3 (1) { ["storage":"ArrayIterator":private]=> array(1) { ["subsubsome"]=> string(14) "subsubdiferent" }}