Рекурсивентертертертертер последний ребенок

StackOverflow https://stackoverflow.com/questions/3811551

  •  26-09-2019
  •  | 
  •  

Вопрос

Я повторяю многомерную массив с рецензионертератором и хотел бы иметь возможность знать, является ли текущий элемент последним ребенком глубины. Я думал об этом:

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

Но рецензионертертертертер говорит, что это не клобно.

Это было полезно?

Решение

Фраза «Последний ребенок его глубины» не особо ясна. Не могли бы вы уточнить именно то, что вы имеете в виду; Предназначение для этого?

Если вы имеете в виду, совсем просто, что глубина изменится после текущего элемента, то (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