2015-10-09 1 views
1

J'ai un tableau multidimensionnel comme ceci:PHP: créer panure de tableau multimensional

$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/', 
      ), 
     ) 
    ), 
); 

Je l'utilise pour créer mon (imbriqué) menu barre latérale

Maintenant, étant donné une chaîne correspondant à l'un des url dans l'exemple ci-dessus, je voudrais construire les miettes de pain en utilisant le title s

Ie, étant donné la chaîne /ctrl/booking/prices/ je voudrais obtenir la liste suivante (je peux ensuite convertir en CSS avec fil d'Ariane):

  1. Réservation
  2. Tariffe e Disponibilità
  3. Modifica Prezzi

(vous voyez que je vais en arrière dans le tableau, trouver des titres; noter que dernier élément est lié à url)

Je suis vraiment coincé là-dessus, il est sur mes compétences :-(
Merci à l'avance!

+0

Ce que vous cherchez est essentiellement la fonction array_search pour les tableaux multidimensionnels. : http://stackoverflow.com/questions/7694843/using-array-search-for-multi-dimensional-array – Matheno

Répondre

1

Vous pouvez essayer comme ça

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

Ceci est presque bien, j'ai édité comme dans ma réponse :-) Mais voici un problème que je didn didn pas montrer: il peut y avoir BEAUCOUP [sous], et cela complique les choses ... – Ivan

0

Version éditée

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