从多维数组中创建面包屑



在我之前的问题中,我错误地认为只有一个[sub]键,但整个侧边栏菜单是这样的:

$sidebar = array(
    'dashboard' => array(
        'levels' => array('1', '2'),
        'title' => 'Bacheca',
        'icon' => 'fa-dashboard',
        'url' => '/ctrl/dashboard',
    ),
    'settings' => array(
        'levels' => array('1'),
        'title' => 'Impostazioni',
        'icon' => 'fa-gear',
        'sub' => array(
            'configuration' => array(
                'levels' => array('1'),
                'title' => 'Configurazione',
                'url' => '/ctrl/configuration',
            ),
            'languages' => array(
                'levels' => array('1'),
                'title' => 'Lingue',
                'url' => '/ctrl/languages',
            ),
            'modules' => array(
                'levels' => array('1'),
                'title' => 'Moduli',
                'url' => '/ctrl/modules',
            ),
            'categories' => array(
                'levels' => array('1'),
                'title' => 'Categorie', 
                'url' => '/ctrl/categories',
            ),
        ),
    ),
    'modules' => array(
        'levels' => array('1'),
        'title' => 'Moduli',
        'icon' => 'fa-puzzle-piece',
        'sub' => array(
            'pages' => array(
                'levels' => array('1'),
                'title' => 'Pagine',
                'url' => '/ctrl/pages',
            ),
            'news' => array(
                'levels' => array('1'),
                'title' => 'News',
                'url' => '/ctrl/news',
            ),
            'contacts' => array(
                'levels' => array('1'),
                'title' => 'Contatti',
                'url' => '/ctrl/contacts',
            ),
            'location' => array(
                'levels' => array('1'),
                'title' => 'Dove siamo',
                'url' => '/ctrl/location',
            ),
            'catalog' => array(
                'levels' => array('1'),
                'title' => 'Catalogo', 
                'url' => '/ctrl/catalog',
            ),
            'gallery' => array(
                'levels' => array('1'),
                'title' => 'Gallery',
                'url' => '/ctrl/gallery',
            ),
            'slide' => array(
                'levels' => array('1'),
                'title' => 'Slide',
                'url' => '/ctrl/slide',
            ),
        ),
    ),
    'shop' => array(
        'levels' => array('1'),
        'title' => 'Shop',
        'icon' => 'fa-shopping-cart',
        'sub' => array(
            'shop-articles' => array(
                'levels' => array('1'),
                'title' => 'Articoli',
                'url' => '/ctrl/shop/articles',
            ),
            'shop-shipping' => array(
                'levels' => array('1'),
                'title' => 'Spedizione',
                'url' => '/ctrl/shop/shipping',
            ),
            'shop-orders' => array(
                'levels' => array('1'),
                'title' => 'Ordini',
                'url' => '/ctrl/shop/orders',
            ),
        ),
    ),
    'booking' => array(
        'levels' => array('1'),
        'title' => 'Booking',
        'icon' => 'fa-calendar',
        'sub' => array(
            'booking-main' => array(
                'levels' => array('1'),
                'title' => 'Tariffe e Disponibilità',
                'sub' => array(
                    'booking-overview' => array(
                        'levels' => array('1'),
                        'title' => 'Panoramica',
                        'url' => '/ctrl/booking/overview',
                    ),
                    'booking-setup' => array(
                        'levels' => array('1'),
                        'title' => 'Setup Camere / Tariffe',
                        'url' => '/ctrl/booking/setup',
                    ),  
                    'booking-prices' => array(
                        'levels' => array('1'),
                        'title' => 'Modifica Prezzi',
                        'url' => '/ctrl/booking/prices',
                    ),
                    'booking-availability' => array(
                        'levels' => array('1'),
                        'title' => 'Modifica Disponibilità',
                        'url' => '/ctrl/booking/availability',
                    ),
                    'booking-openclose' => array(
                        'levels' => array('1'),
                        'title' => 'Apri / Chiudi Camere',
                        'url' => '/ctrl/booking/openclose',
                    ),
                    'booking-restrictions' => array(
                        'levels' => array('1'),
                        'title' => 'Restrizioni',
                        'url' => '/ctrl/booking/restrictions',
                    ),
                    'booking-rates' => array(
                        'levels' => array('1'),
                        'title' => 'Tariffe',
                        'sub' => array(),
                    ),
                ),
            ),
            'booking-promo' => array(
                'levels' => array('1'),
                'title' => 'Promozioni',
                'url' => '/ctrl/booking/promo',
            ),
            'booking-reservations' => array(
                'levels' => array('1'),
                'title' => 'Prenotazioni',
                'url' => '/ctrl/booking/reservations',
            ),
        ),
    ),
    'users' => array(
        'levels' => array('1'),
        'title' => 'Utenti',
        'icon' => 'fa-users',
        'sub' => array(
            'customers' => array(
                'levels' => array('1'),
                'title' => 'Clienti',
                'url' => '/ctrl/customers',
            ),
            'agents' => array(
                'levels' => array('1'),
                'title' => 'Agenti',
                'url' => '/ctrl/agents',
            ),
        ),
    ),
);

可以看到,[sub] s可以嵌套
问题仍然是:给定与上面示例中的url之一匹配的字符串,我想使用title s

构建面包屑

。e,给定字符串/ctrl/booking/prices/,我想得到以下列表(然后我可以用CSS转换为面包屑):

    预订
  1. 关税分配
  2. Modifica Prezzi

(你看我在数组中向后查找标题;注意最后一项链接到url)

请帮忙?

我编辑了你的答案:

function getTitle(Array $arr, $find, $firstLevel = true) {
    $resultArray = array();
    foreach($arr as $val){
        if (isset($val['url']) && $val['url'] == $find) {
            return array('<li><a href="' . $val['url'] . '">' . $val['title'] . '</a></li>');
        }
        if (isset($val['sub'])) {
            $result = getTitle( $val['sub'], $find, false);
            if($result){
                $resultArray = array_merge($result);
                $resultArray[] = '<li>' . $val['title'] . '</li>';
                if(!$firstLevel){
                    return $resultArray;
                }
            }
        }
    }
    if(count($resultArray)){
        return implode(array_reverse($resultArray));
    }
    return false;
};

使用示例:

echo getTitle($sidebar, '/ctrl/booking/prices');
结果

:

预订

  • 关税分配
  • Modifica Prezzi
  • 用法示例2:

    echo getTitle($sidebar, '/ctrl/categories');
    

    结果2 :

  • Impostazioni
  • Categorie
  • 最新更新