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

1

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

$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 в приведенном выше примере, я хотел бы построить панировочные сухари, используя title s

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

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

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

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

  • 0
    То, что вы ищете, это в основном функция array_search для многомерных массивов. В этом разделе описаны некоторые параметры: stackoverflow.com/questions/7694843/…
Теги:
multidimensional-array
breadcrumbs

2 ответа

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);
  • 0
    Это почти нормально, я отредактировал, как в моем ответе :-) Но здесь возникает проблема, которую я не показывал: может быть МНОГО вложенных [sub], и это усложняет вещи ...
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню