1--TEST-- 2SPL: RecursiveIteratorIterator and beginChildren/endChildren 3--FILE-- 4<?php 5 6class Menu extends ArrayObject 7{ 8 function getIterator() 9 { 10 echo __METHOD__ . "\n"; 11 return new RecursiveArrayIterator($this); 12 } 13} 14 15class MenuOutput extends RecursiveIteratorIterator 16{ 17 function __construct(Menu $it) 18 { 19 parent::__construct($it); 20 } 21 function rewind() 22 { 23 echo "<ul>\n"; 24 parent::rewind(); 25 } 26 function beginChildren() 27 { 28 echo str_repeat(' ',$this->getDepth())."<ul>\n"; 29 } 30 31 function endChildren() 32 { 33 echo str_repeat(' ',$this->getDepth())."</ul>\n"; 34 } 35 function valid() 36 { 37 if (!parent::valid()) { 38 echo "<ul>\n"; 39 return false; 40 } 41 return true; 42 } 43} 44 45$arr = array("a", array("ba", array("bba", "bbb"), array(array("bcaa"))), array("ca"), "d"); 46$obj = new Menu($arr); 47$rit = new MenuOutput($obj); 48foreach($rit as $k=>$v) 49{ 50 echo str_repeat(' ',$rit->getDepth()+1)."$k=>$v\n"; 51} 52?> 53===DONE=== 54<?php exit(0); ?> 55--EXPECTF-- 56Menu::getIterator 57<ul> 58 0=>a 59 <ul> 60 0=>ba 61 <ul> 62 0=>bba 63 1=>bbb 64 </ul> 65 <ul> 66 <ul> 67 0=>bcaa 68 </ul> 69 </ul> 70 </ul> 71 <ul> 72 0=>ca 73 </ul> 74 3=>d 75<ul> 76===DONE=== 77