2016-10-05 4 views
-1

Voici ma table et je dois l'afficher en utilisant php?comment faire une boucle récursive pour une navigation hiérarchique en utilisant Php Codeigniter?

Ex. Navigation Tableau enter image description here

Et ressembler à ceci:

enter image description here

Y at-il un code php pour cela?

Merci!

+0

Avez-vous essayé d'écrire quoi que ce soit? Si oui, s'il vous plaît partagez-le et nous serons heureux de vous aider. Vous devriez envisager d'utiliser un arbre imbriqué - https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/tree.md. Cela vous donnera des méthodes pour convertir votre table en une arborescence hiérarchique. –

+0

@ Meezaan-ud-Din ne m'a pas donné des méthodes si jamais vous pouvez le dire ci-dessous. Merci – howardtyler

Répondre

2

code dans votre modèle

public function getHierMenu() { 
    $rows = $this->db->get('table_name')->result(); 

    $depthIndex = array('nav_hier_root','nav_hier_d1','nav_hier_d2','nav_hier_d3','nav_hier_d4'); 
    $menu = []; 
    foreach($rows as $row){ 
     $depth = $row->nav_hier_depth; 

     if($depth > 0) 
     $menu[$row->$depthIndex[0]] = []; 
     if($depth > 1) 
     $menu[$row->$depthIndex[0]][] = $row->$depthIndex[1]; 
     if($depth > 2) 
     $menu[$row->$depthIndex[0]][$row->$depthIndex[1]][] = $row->$depthIndex[2]; 
     if($depth > 3) 
     $menu[$row->$depthIndex[0]][$row->$depthIndex[1]][$row->$depthIndex[2]][] = $row->$depthIndex[3]; 
     if($depth > 4) 
     $menu[$row->$depthIndex[0]][$row->$depthIndex[1]][$row->$depthIndex[2]][$row->$depthIndex[3]][] = $row->$depthIndex[4]; 
    } 

    return $menu; 
} 

MISE À JOUR

Utilisez cette fonction récursive et passer le tableau retourné ($menu) de la fonction précédente pour imprimer le menu à l'aide ulli.

function printMenu($menu) { 

    echo '<ul>'; 
    foreach ($menu as $k => $v) { 
     echo '<li>'; 
     if (!empty($v) && is_array($v)) { 
      echo $k; 
      printMenu($v); 
     } else { 
      echo $v; 
     } 
     echo '</li>'; 
    } 
    echo '</ul>'; 
} 

Il a été testé et fonctionne correctement.

+0

Salut merci mais j'obtiens une erreur 'Correction de chaîne illégale 'doggie'' Trouvé à cette ligne: '$ menu [$ row -> $ depthIndex [0]] [$ row -> $ depthIndex [1]] = $ row -> $ depthIndex [2]; ' – howardtyler

+0

Veuillez me laisser vérifier, je mettrai à jour mon post bientôt, si des erreurs sont trouvées. –

+0

D'accord, je ne sais pas pourquoi c'était un décalage de chaîne illégal .... – howardtyler