В моем предыдущий вопрос Я ошибочно считал только одну [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
Т.е., учитывая строку /ctrl/booking/prices/
Я хотел бы получить следующий список (я могу преобразовать в хлебные крошки с помощью CSS):
(вы видите, что я иду назад в массиве, находя заголовки; обратите внимание, что последний элемент связан с 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');
Результат:
Пример использования 2:
echo getTitle($sidebar, '/ctrl/categories');
Результат 2:
Других решений пока нет …