Précédent   Forum des professionnels en informatique > PHP > Scripts
Scripts Forum d'entraide sur les scripts PHP téléchargés. Les meilleurs scripts PHP, la FAQ scripts PHP, toutes les FAQ PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2011, 15h44   #1
Membre du Club
 
Inscription : avril 2011
Messages : 91
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 91
Points : 40
Points : 40
Par défaut Tableau aux dimensions indéfinies

Bonjour.

J'ai créé une table contenant mon menu de navigation.

Pour faire simple j'ai 3 champs :
- code
- libelle
- id_parent

J'ai un tableau de ce genre (je sais qu'il y a la balise CODE
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
Array
(
 
    [0] => Array
 
        (
 
            [level] => Array
 
                (
 
                    [codes] => 1
 
                    [libelle] => Page 1
 
                    [id_parent] => 0
 
                )
 
            [sublevel] => Array
 
                (
 
                )
 
        )
 
    [1] => Array
 
        (
 
            [level] => Array
 
                (
 
                    [codes] => 2
 
                    [libelle] => Page 2
 
                    [id_parent] => 0
 
                )
 
            [sublevel] => Array
 
                (
 
                    [0] => Array
 
                        (
 
                            [level] => Array
 
                                (
 
                                    [codes] => 3
 
                                    [libelle] => Page 2-1
 
                                    [id_parent] => 2
 
                                )
 
                            [sublevel] => Array
 
                                (
 
                                )
 
                        )
 
                    [1] => Array
 
                        (
 
                            [level] => Array
 
                                (
 
                                    [codes] => 4
 
                                    [libelle] => Page 2-2
 
                                    [id_parent] => 2
 
                                )
 
                            [sublevel] => Array
 
                                (
 
                                    [0] => Array
 
                                        (
 
                                            [level] => Array
 
                                                (
 
                                                    [codes] => 5
 
                                                    [libelle] => Page 2-2-1
 
                                                    [id_parent] => 10
 
                                                )
 
                                            [sublevel] => Array
 
                                                (
 
                                                    [0] => Array
 
                                                        (
 
                                                            [level] => Array
 
                                                                (
 
                                                                    [codes] => 6
 
                                                                    [libelle] => Page 2-2-2
 
                                                                    [id_parent] => 11
 
                                                                )
 
                                                            [sublevel] => Array
 
                                                                (
 
                                                                )
 
                                                        )
 
                                                )
 
                                        )
 
                                )
 
                        )
 
                )
 
        )
 
)
Je ne continue pas mais il peut y avoir autant de sous-menus que l'on veut.

En tant normal j'aurais fait autant de foreach que nécessaire mais là sans connaître la dimension je sèche.

Pour info, le script que j'utilise pour faire mon tableau est celui-là : https://gist.github.com/104357

D'une part, est-ce réalisable ?
D'autre part, quelqu'un a une idée de la façon dont je pourrais procéder ?

Merci.
p4ndore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 15h54   #2
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Tu dois crée une fonction qui appelle soit même tantque la valeur est un array
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 16h04   #3
Membre du Club
 
Inscription : avril 2011
Messages : 91
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 91
Points : 40
Points : 40
C'est ce que j'essaie de faire en vain :/
p4ndore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 16h16   #4
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Quelle est l'état final que tu cherche
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 16h38   #5
Membre du Club
 
Inscription : avril 2011
Messages : 91
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 91
Points : 40
Points : 40
Je voudrais que tout soit ordonné en ul li imbriqués.

J'ai fait ça mais j'arrive pas à en faire une fonction récursive :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
function CreateMenu($resource, $id_key, $parent_id_key){
	$tabmenu = Menu($resource, $id_key, $parent_id_key);
	$menu = '';
	if (!empty($tabmenu)){
		$menu .= '<ul>'."\n";
		foreach ($tabmenu as $k1 => $v1){
			foreach ($v1 as $kL1 => $vL1){
				if ($kL1 == 'level'){
					$menu .= '<li>'.$vL1['libelle'].'</li>'."\n";
				}else if ($kL1 == 'sublevel' && !empty($v1['sublevel'])){
					$menu .= '<ul>'."\n";
					foreach ($v1['sublevel'] as $k2 => $v2){
						foreach ($v2 as $kL2 => $vL2){
							if ($kL2 == 'level'){
								$menu .= '<li>'.$vL2['libelle'].'</li>'."\n";
							}else if ($kL2 == 'sublevel' && !empty($v2['sublevel'])){
								$menu .= '<ul>'."\n";
								foreach ($v2['sublevel'] as $k3 => $v3){
									foreach ($v3 as $kL3 => $vL3){
										if ($kL3 == 'level'){
											$menu .= '<li>'.$vL3['libelle'].'</li>'."\n";
										}else if ($kL3 == 'sublevel' && !empty($v3['sublevel'])){
											$menu .= '<ul>'."\n";
											foreach ($v3['sublevel'] as $k4 => $v4){
												foreach ($v4 as $kL4 => $vL4){
													if ($kL4 == 'level'){
														$menu .= '<li>'.$vL4['libelle'].'</li>'."\n";
													}
												}
											}
											$menu .= '</ul>'."\n";
										}
									}
								}
								$menu .= '</ul>'."\n";
							}
						}
					}
					$menu .= '</ul>'."\n";
				}
			}
		}
		$menu .= '</ul>'."\n";
	}
	return $menu;
}
p4ndore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 18h05   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
C'est simple ce que tu cherches à faire, c'est un cas d'école de réccursivité.

Tu peux faire quelque chose du genre:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
function generate_list ($arr) {
  if (empty($arr)) return;
  echo "<ul>";
  foreach ($arr as $key => $value) {
     if ($key == 'level') {
        echo "<li>$value</li>";
     }
     elseif ($key == 'sublevel') {
        echo "<li>" . generate_list($value) . '</li>';
     }
  }
  echo "</ul>";
}
J'ai pas testé mais c'est l'idée en tout cas.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/05/2011, 12h02   #7
Membre du Club
 
Inscription : avril 2011
Messages : 91
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 91
Points : 40
Points : 40
En effet c'est nickel, merci

Il faut vraiment que j'approfondisse la récursivité
p4ndore est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h21.


 
 
 
 
Partenaires

Hébergement Web