Fonction récursive?
Cet exercice est simplement, un moyen de comprendre la récursion avec php. Une fonction récursive est une fonction qui s’appelle elle même sous certaines conditions. 🙂
Bon à quoi sert vraiment cette sacré fonction. Alors c’est un moyen très efficace de construire une arborescence, par exemple dans notre exemple: un menu.
Pour commencer on peut d’abord donner un exemple de ce qu’il faut réaliser.
- Premier menu
- Second menu
- Premier sous-menu
- Second sous-menu
C’est un mini exemple de rien du tout, évidemment une fois ceci fait on peut générer des menu en cascade avec beaucoup plus de profondeur.
Ceci dit vous pouvez aussi faire des sites map ou des arborescences de privilèges, je laisse cela à votre créativité.
Commençons donc notre exercice:
Comment allons nous donc réaliser ce menu?
On remarque qu’en fait chacun des sous-menu sont lié à un simple et unique menu parent. Bien. Mais il existe à part ça un ensemble de menu qui n’auront pas de parent.. mmm…
Bon allé d’accord, nous auront quand même des menu qui seront raccroché à rien. On va mettre ici 0, en supposant qu’il n’y ai aucune occurrence avec l’id 0.
id | Nom du menu | parent |
---|---|---|
1 | Premier menu | 0 |
2 | Second menu | 0 |
3 | Premier sous-menu | 2 |
4 | Second sous-menu | 2 |
Bon donc de cette manière nous auront une cohérence dans la structure de nos données.
Et comment on affiche ça avec php et la récursion?
C’est très simple, nous allons pour cela mettre notre model dans un tableau, on aurait pu très bien mettre tout cela dans une DB.
On va par rapport à un fonction daffichage simple ajouter un paramètre à notre fonction qui va déterminer une fois qu’il commencera à boucler si l’id du noeud courant est contenu dans n’importe quel des autres dans le champ « parent » à chaque fois qu’on entre dans la boucle. Il suffira de mettre une condition au préalable pour savoir si oui ou non la valeur est affichable ou non
1, "label" => "Premier menu", "parent"=> "0"), array("id" => 2, "label" => "Second menu", "parent"=> "0"), array("id" => 3, "label" => "Premier sous-menu", "parent"=> "2"), array("id" => 4, "label" => "Second sous-menu", "parent"=> "2") ); function afficherMenu($menu,$id){ echo "
- ";
foreach($menu as $m){
if($m['parent']==$id){
echo "
- ".$m['label']." "; afficherMenu($menu,$m['id']); } } echo "