Вам придется проверить последний элемент отдельно.

длилZend_View_Helper_Navigation_Menuи он используетRecursiveIteratorIterator перебирать дерево меню. То, что я хочу иметь возможность определить, нахожусь ли я на первом или последнем элементе для уровня ветви в дереве.

Вот пример того, что я ищу:

Нав 1 (первый)Nav 1.1 (первый и последний)Nav 1.1.1 (первая)Nav 1.1.2Nav 1.1.3 (последняя)Nav 2Nav 2.1 (первая)Nav 2.2 (последняя)Нав 3 (последний)Nav 3.1 (первая)Нав 3.2 (последний)

Дополнительная информация

Версия PHP 5.2.13

Решение

В пределахforeach ($iterator as $page) цикл две переменные могут быть использованы для отслеживания глубины,$depth а также$prevDepth, Простое условное сравнение может затем определить первый элемент на уровне ветви:if ($depth > $prevDepth).

СозданиеRecursiveCachingIterator с использованиемZend_Navigation_Container объект, а затем с помощью этого, чтобы создатьRecursiveIteratorIterator добавляетhasNext() метод.

$rci = new RecursiveCachingIterator($container, CachingIterator::FULL_CACHE);
$iterator = new RecursiveIteratorIterator($rci,
                    RecursiveIteratorIterator::SELF_FIRST);
/* snip */
$prevDepth = -1;
foreach ($iterator as $page) {
    $depth = $iterator->getDepth();
    /* snip */
    if ($depth > $prevDepth) {
        // first branch item
    }
    /* snip */
    if (!$iterator->hasNext()) {
        // last branch item
    }
    /* snip */
    $prevDepth = $depth;
}

Ответы на вопрос(2)

Ваш ответ на вопрос