PHP: создать панировочные сухари из многомерного массива

В моем предыдущий вопрос Я ошибочно считал только одну [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 В приведенном выше примере, я хотел бы построить панировочные сухари, используя titles

Т.е., учитывая строку /ctrl/booking/prices/ Я хотел бы получить следующий список (я могу преобразовать в хлебные крошки с помощью CSS):

  1. бронирование
  2. Tariffe e Disponibilità
  3. Модифика Прецци

(вы видите, что я иду назад в массиве, находя заголовки; обратите внимание, что последний элемент связан с url)

Пожалуйста, помогите?

0

Решение

Я редактировал ваш ответ:

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');

Результат:

  • бронирование
  • Tariffe e Disponibilità
  • Модифика Прецци
  • Пример использования 2:

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

    Результат 2:

  • Impostazioni
  • Категория
  • 1

    Другие решения

    Других решений пока нет …

    По вопросам рекламы ammmcru@yandex.ru
    Adblock
    detector