Фраза «последний ребенок своей глубины» не особенно понятна. Не могли бы вы уточнить, что именно вы имеете в виду; предполагаемое использование для этого?
Если вы просто имеете в виду, что глубина будет изменяться после текущего элемента, то (Recursive)CachingIterator
имеет удобный метод hasNext
, чтобы определить, есть ли у итератора какие-либо дополнительные элементы. Чтобы привести пример, подобный приведенному в вопросе:
$array = array(
range(1,6),
range(7,8),
'foo' => range(1,3),
'bar' => range(4,5),
);
$rit = new RecursiveArrayIterator($array);
$iterator = new RecursiveIteratorIterator(
new RecursiveCachingIterator($rit),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($iterator as $val) {
$lastChild = !$iterator->hasNext();
if ($lastChild) {
echo "$val is the last child!\n";
}
}
Выходы:
6 is the last child!
8 is the last child!
3 is the last child!
5 is the last child!