Les tableaux indexés à deux dimensions
Je sais (par expérience) que la notion de
tableau à deux dimensions est plus difficile à appréhender
comme concept pour certaines ou certains auditeurs. Surtout si on n'a
jamais programmé de sa vie. Mais vous allez voir qu'en fait, c'est
extrêmement simple. |
Nous avons déjà vu ce qu'était un tableau à
une dimension (un vecteur) dont l'image la pus approchante est celle
d'un meuble de rangement de CD audios tout en hauteur, avec un casier
pour chaque disque. Pour celles et ceux qui n'auraient pas vu cette
leçon, allez la voir.
|
Déclaration
d'un tableau à deux dimensions
Comme nous l'avons déjà vu dans la leçon sur les
tableaux à une dimension (les vecteurs), nous savons que nous
pouvons mettre absolument tout ce que l'on veut dans chaque casier de
notre tableau. Y compris même un autre tableau. Hé bien
c'est exactement comme ça qu'on déclare un tableau à
deux dimensions. $Discotheque = array(array()) ; Ecrire ça, signifie pour PHP : "tu crée un tableau
qui s'appellera $Discotheque
et dedans, tu y mets un autre tableau". |
Remplissage d'un
tableau indexé à deux dimensions
Il faut d'abord avoir déclaré notre tableau comme indiqué dans le paragraphe précédent par l'instruction : $Discotheque = array(array()) ; Maintenant, remplissons le. Ceci peut se faire tout de suite après
avoir déclaré le tableau, ou n'importe quand dans le cours
de notre programme. $Discotheque[0][0]
= "Mozart"
; Remarquez que l'on met d'abord le numéro du meuble (tableau) entre crochets, puis le numéro du casier (poste) dans ce meuble, toujours entre crochets. Ainsi, le premier meuble (je rappelle que par défaut il porte le numéro zéro, comme d'habitude), sera équivalent à notre maintenant célèbre $MeubleClassique. Maintenant, disons que dans notre deuxième meuble (celui d'à côté) nous classions des disques de jazz. Ce deuxième meuble, tout contre le premier, aura l'indice 1 puisque c'est le deuxième. Nous le remplirons de la manière suivante (par exemple) : $Discotheque[1][0]
= "Louis Armstrong"
; Notez que maintenant, c'est l'indice 1 qui représente
ce deuxième meuble (entre les premiers crochets). Alors que les
numéros des casiers, eux ne changent pas. Il vont de 0
à 9, comme pour le premier (entre les deuxièmes
crochets). Si vous avez un troisième meuble (donc d'indice 2), à côté des deux autres, collé à eux, et que vous y classiez vos disques de chanteurs d'opéra, vous écririez : $Discotheque[2][0]
= "Théo Adam"
; Remarquez l'indice 2 en première position entre crochets qui désigne votre troisième meuble, alors que les incides des casiers de ce meuble varient comme les autres. Notez également qu'il ne contient pas autant de postes que les deux premiers, mais ça n'a strictement aucune importance. On peut faire ce que l'on veut. J'aurais même pu ne pas remplir des casiers contigus, mais laisser des trous. Ca marche aussi. Bon ! Nous nous arrêterons là pour le moment. Je crois que vous avez compris comment ça fonctionne et c'est le principal. |
Accéder
aux contenus des postes d'un tableau à deux dimensions
Une fois notre tableau rempli, il ne nous reste plus qu'à nous en servir. Ca signifie avoir accès aux contenus de chaque postes. Dans un tableau de ce genre, indexé (donc repéré par des numéros), pour aller chercher un disque particulier, il faut que l'on sache deux choses : dans quel meuble il se trouve, et dans quel casier de ce meuble. En langage informatique, ça veut dire connaître l'indice du tableau et l'indice du poste de ce tableau. Par exemple pour aller chercher le disque de Lionel Hampton, qui se trouve dans le deuxième meuble (le jazz) et dans le huitième casier de ce meuble, il faudra écrire : $DisqueA_Ecouter = $Discotheque[1][7] ; Notez que le numéro du meuble est "1"
puisque c'est le deuxième et que tout comence à zéro,
et que le deuxième indice est "7"
puisque c'est le huitième disque, pour la même raison.
// liste de tous les disques : for($NumMeuble
= 0; $NumMeuble<=
2; $NumMeuble++)
{ // boucle sur les meubles Vous obtiendrez l'affichage suivant : Mozart Louis Armstrong Théo Adam Notez que dans la boucle sur les disques, qui va jusqu'à 10, on a allègrement dépassé le nombre de disques du troisième meuble. Mais ça ne dérange pas outre mesure PHP, qui, si le casier (voire le meuble) n'existe pas dans la discothèque, n'affiche tout simplement rien et ne renvoie aucun message d'erreurs comme on aurait été en droit de s'y attendre. C'est en même temps pratique, et en même temps dangereux, car si on a une erreur dans notre programme, on ne sera pas averti lors d'un dépassement d'indice dans un tableau. Je suis allé jusqu'à 10 et non pas 9 dans l'indice des disques, pour avoir une ligne vide de séparation entre les meubles. En ce qui concerne l'affichage par les fonctions print_r() ou var_dump() ou implode(), allez voir Affichage du contenu des tableaux indexés à deux dimensions. |
Ajout et modification
des contenus des postes
L'ajout et la modification des postes d'un tableau indexé à deux miemesions se fait très exactement de la même manière que pour un tableau indexé à une dimension. Voir la leçon correspondante. Simplement, il faudra donner le numéro du meuble et le numéro du casier. En français, les indices des deux tableaux. Par exemple pour rajouter le prénom de "Wagner" (Richard) qui se trouve dans le tableau d'indice 0 (le premier) et dans le casier d'indice 9 (le huitième) de ce tableau, il faudra écrire : $Discotheque[0][9] = "Richard Wagner" ; et le tour est joué. Pour rajouter une chanteuse à notre meuble des chanteurs d'opéra, il faudra écrire : $Discotheque[2][7] = "Teresa Berganza" ; en lui attribuant un numéro disponible. On peut sauter des cases, je le rappelle. Si on se trompe et qu'on donne un numéro de poste existant, la nouvelle valeur viendrait "écraser" l'ancienne. Attention ! |
Ce cours est enseigné par Philippe
Médan
dans le cadre de la formation des professionnels de l'INTERNET.
au CREFAC
, 14 rue Scandicci, 93000 Pantin. Tél. : 01 48 46 51 99
au GITA-GRETA , Lycée
Technologique Diderot 61, rue David D'Angers 75019 Paris Tél. : 01
40 40 36 27
au CESI à l'Ecole
des ingénieurs, 116 Av Aristide Briand, BP 57, 92224 Bagneux CEDEX
Tél. : 01 45 36 70 00
© Philippe Médan 1999-2003. Tous droits de reproduction réservés pour tous pays.