PHP: создавать хлебные крошки из многомерного массива

У меня есть многомерный массив, как это:

$sidebar_booking = array(
'booking' => array(
'levels' => array('1'),
'title' => 'Booking',
'icon' => 'fa-calendar',
'sub' => array(
'rates-availability' => 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',
),
),
),
'booking-promo' => array(
'levels' => array('1'),
'title' => 'Promozioni',
'url' => '/ctrl/booking/promo/',
),
'booking-reservations' => array(
'levels' => array('1'),
'title' => 'Prenotazioni',
'url' => '/ctrl/booking/reservations/',
),
)
),
);

Я использую его для создания моего (вложенного) меню боковой панели

Теперь, учитывая строку, соответствующую одному из url В приведенном выше примере, я хотел бы построить панировочные сухари, используя titles

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

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

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

Я действительно застрял на этом, все кончено мои навыки 🙁
Заранее спасибо!

1

Решение

Вы можете попробовать вот так

function getTitle(Array $arr, $find) {
if (isset($arr['url']) && $arr['url'] == $find) {
return $arr['title'];
}
if (isset($arr['sub'])) {
return $arr['title'] . '/' . getTitle( $arr['sub'], $find);
}
return false;
}

echo getTitle($menu, $url);
1

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

Отредактированная версия

function getTitle(Array $arr, $find) {
foreach($arr as $val){
if (isset($val['url']) && $val['url'] == $find) {
return '<li><a href="' . $val['url'] . '">' . $val['title'] . '</a></li>';
}
if (isset($val['sub'])) {
return '<li>' . $val['title'] . '</li>' . getTitle( $val['sub'], $find);
}
}
return false;
};
0

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