RecursiveIteratorterator Último filho
Pergunta
Eu itero através de uma matriz multidimensional com o RecursiveIteratorterator e gostaria de saber se o elemento atual é o último filho de sua profundidade. Eu pensei sobre isso:
$iterator = new RecursiveIteratorIterator($array,
RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $val) {
$next = clone $iterator;
$next->next();
$lastChild = ($next->getDepth() < $iterator->getDepth());
}
Mas o recursiveeratorterator diz que não é clonável.
Solução
A frase "último filho de sua profundidade" não é particularmente clara. Você poderia elaborar com precisão o que você quer dizer; o uso pretendido para isso?
Se você quer dizer, simplesmente, que a profundidade mudará após o elemento atual, então o (Recursive)CachingIterator
tem um prático hasNext
Método para determinar se o iterador possui mais itens. Para dar um exemplo diluído semelhante ao da pergunta:
$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";
}
}
Saídas:
6 is the last child!
8 is the last child!
3 is the last child!
5 is the last child!
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow