PHP RecursiveIteratorIterator: Her şube düzeyinde ilk ve son öğeyi Belirlenmesi

0 Cevap php

I Zend_View_Helper_Navigation_Menu artırdık ve bir RecursiveIteratorIterator menü ağacı üzerinde yineleme için kullanır. Ne belirlemek mümkün olmak istiyorum ben ağacında bir dal düzeyi için ilk veya son öğeyi duyuyorum olup olmadığıdır.

İşte aradığım bir örnek:

  • Nav 1 (first)
    • Nav 1.1 (first & last)
      • Nav 1.1.1 (ilk)
      • 1.1.2 NAV
      • Nav 1.1.3 (son)
  • Nav 2
    • Nav 2.1 (ilk)
    • Nav 2.2 (son)
  • Nav 3 (last)
    • Nav 3.1 (ilk)
    • Nav 3.2 (son)

Additional Information

  • PHP Version 5.2.13

Solution

foreach ($iterator as $page) döngü içinde iki parametre, $depth ve $prevDepth, derinliklerin takip etmek için kullanılabilir. Koşullu basit bir karşılaştırma, daha sonra şube düzeyinde ilk öğeyi belirleyebilirsiniz: if ($depth > $prevDepth).

Oluşturma RecursiveCachingIterator Zend_Navigation_Container nesnesi kullanılarak ve ardından RecursiveIteratorIterator ekler hasNext() yöntemi oluşturmak için kullanarak.

$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;
}

0 Cevap