RecursiveIteratorIterator letztes Kind
Frage
I durchlaufen ein mehrdimensionales Array mit RecursiveIteratorIterator und möchte in der Lage sein zu wissen, ob das aktuelle Element das letzte Kind von ihm ist Tiefe. Ich dachte darüber nach:
$iterator = new RecursiveIteratorIterator($array,
RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $val) {
$next = clone $iterator;
$next->next();
$lastChild = ($next->getDepth() < $iterator->getDepth());
}
Aber der RecursiveIteratorIterator sagt es nicht klonbar ist.
Lösung
Der Ausdruck „letztes Kind seiner Tiefe“ ist nicht besonders klar. Könnten Sie genau näher ausführen, was Sie meinen; die beabsichtigte Verwendung für das?
Wenn Sie meinen, ganz einfach, dass die Tiefe nach dem aktuellen Elemente ändern wird, dann hat das (Recursive)CachingIterator
eine handliche hasNext
Methode, um festzustellen, ob die Iterator weitere Elemente hat. Gibt ein verwässertes Beispiel ähnlich wie bei der Frage:
$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";
}
}
Ausgänge:
6 is the last child!
8 is the last child!
3 is the last child!
5 is the last child!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow