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.

War es hilfreich?

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
scroll top