質問

私はRecursiveIteratorIteratorと多次元配列を反復処理し、現在の要素がそれの深さの最後の子であるかどうかを知ることができるようにしたいと思います。私はこれについて考えます:

$iterator = new RecursiveIteratorIterator($array,
  RecursiveIteratorIterator::SELF_FIRST);    
foreach ($iterator as $val) {
  $next = clone $iterator;
  $next->next();
  $lastChild = ($next->getDepth() < $iterator->getDepth());
}

しかしRecursiveIteratorIteratorは、それが複製可能ではないと言う。

役に立ちましたか?

解決

という句「その深さの最後の子は」特に明確ではありません。あなたは何を意味するかを正確に手の込んだでした。このため、使用目的?

あなたが意味する場合は、非常に単純に、深さは現在の要素の後に変更されること、そして(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!
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top