function rewind() { echo "<ul>\n"; parent::rewind(); } function beginChildren() { echo str_repeat(' ', $this->getDepth()) . "<ul>\n"; } function endChildren() { echo str_repeat(' ', $this->getDepth()) . "</ul>\n"; } function valid() { if (!parent::valid()) { echo "<ul>\n"; return false; } return true; } } $arr = array("a", array("ba", array("bba", "bbb"), array(array("bcaa"))), array("ca"), "d"); $obj = new RecursiveArrayIterator($arr); $rit = new RecursiveArrayIteratorIterator($obj); foreach ($rit as $k => $v) { echo str_repeat(' ', $rit->getDepth() + 1) . "{$k}=>{$v}\n"; } ?> ===DONE===
<?php $count = 10; class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator { function rewind() { echo "dummy\n"; } function endChildren() { global $count; echo $this->getDepth(); if (--$count > 0) { // Trigger use-after-free parent::rewind(); } } } $arr = array("a", array("ba", array("bba", "bbb"))); $obj = new RecursiveArrayIterator($arr); $rit = new RecursiveArrayIteratorIterator($obj); foreach ($rit as $k => $v) { echo $rit->getDepth() . "{$k}=>{$v}\n"; }