Les tableaux associatifs à deux dimensions
Leçons à avoir vu avant : |
Comme nous l'avons déjà vu, il existe des tableaux associatifs à une dimension. Nous savons comment ils fonctionnent. Il existe aussi des tableaux indexés à une et à deux dimensions et nous savons également comment ils fonctionnent. La différence entre un tableau indexé et un tableau associatif repose uniquement sur le contenu de l'étiquette qui référence le casier (le poste) de chaque tableau. Dans les tableaux indexés, c'est un numérique entier (en français : un chiffre tout bête et tout simple, sans virgule), dans les tableaux associatifs, c'est une chaîne de caractères. Pour le reste il n'y au strictement aucune différence entre les deux. La différence est purement conceptuelle, car PHP gère les deux très exactement de la même manière. Nous n'allons donc pas passer des heures sur les tableaux associatifs à deux dimension. Mais nous allons quand même les étudier et donner des exemples. |
Déclaration
d'un tableau associatif à deux dimensions
Reprenons notre exemple du tableau associatif à une dimension donnant la traduction Anglais-Français des jours de la semaine. Il se déclarait de la manière suivante : $JourSemaine = array("Monday" => "Lundi", "Tuesday" => "Mardi", "Wednesday" => "Mercredi", "Thursday" => "Jeudi", "Friday" => "Vendredi", "Saturday" => "Samedi", "Sunday" => "Dimanche") ; Vous vous souvenez ? Bon ! Maintenant, rajoutons-en un autre, donnant cette fois la traduction des mois de l'Anglais en Français. Nous aurons : $Mois = array("January" => "janvier", "February" => "février", "March" => "mars", "April" => "avril", "May" => "mai", "June" => "juin", "July" => "juillet", "August" => "août", "September" => "septembre", "October" => "octobre", "November" => "novembre", "December" =>"décembre") ; Nous voici en présence de deux tableaux associatifs à une dimension (vecteurs). Pour créer un tableau associatif à deux dimensions avec ces deux là, il n'y a qu'à les réunir en un seul tableau (comme nous avons fait pour les meubles de disques) et écrire très simplement : $TradJoursMois = array("NomJour" => $JourSemaine, "NomMois" => $Mois) ; $TradJoursMois
est le nom que je décide de donner à mon tableau associatif
à deux dimensions. Voila. Notre tableau associatif à deux dimensions est créé et rempli. Pour en visualiser le contenu, utilisez la fonction : print_r($TradJoursMois) ; et vous obtiendrez le résultat suivant (en mettant cette fonction entre les balises HTML <pre> et </pre>) : Array ( [NomJour] => Array ( [Monday] => Lundi [Tuesday] => Mardi [Wednesday] => Mercredi [Thursday] => Jeudi [Friday] => Vendredi [Saturday] => Samedi [Sunday] => Dimanche ) [NomMois] => Array ( [January] => janvier [February] => février [March] => mars [April] => avril [May] => mai [June] => juin [July] => juillet [August] => août [September] => septembre [October] => octobre [November] => novembre [December] => décembre ) ) Si vous désirez encore plus de précisions, utilisez la fonction (en la mettant entre les balises HTML <pre> et </pre> pour conserver l'indentation ) : var_dump($TradJoursMois) ; et vous aurez : array(2) { ["NomJour"]=> array(7) { ["Monday"]=> string(5) "Lundi" ["Tuesday"]=> string(5) "Mardi" ["Wednesday"]=> string(8) "Mercredi" ["Thursday"]=> string(5) "Jeudi" ["Friday"]=> string(8) "Vendredi" ["Saturday"]=> string(6) "Samedi" ["Sunday"]=> string(8) "Dimanche" } ["NomMois"]=> array(12) { ["January"]=> string(7) "janvier" ["February"]=> string(7) "février" ["March"]=> string(4) "mars" ["April"]=> string(5) "avril" ["May"]=> string(3) "mai" ["June"]=> string(4) "juin" ["July"]=> string(7) "juillet" ["August"]=> string(4) "août" ["September"]=> string(9) "septembre" ["October"]=> string(7) "octobre" ["November"]=> string(8) "novembre" ["December"]=> string(8) "décembre" } } |
Comment remplir
un tableau associatif à deux dimensions
Nous venons de voir une première méthode au paragraphe
précédent, pour remplir un tableau associatif à
deux dimensions lors de sa déclaration. Mais il se peut que nous
ayons oublié des choses ou que nous voulions tout simplement
y rajouter des trucs au cours de notre programme. Alors là, rien
de plus simple. Il suffit tout simplement de le dire. $JourSemaineAll = array("Lundi" => "Montag", "Mardi" => "Dienstag", "Mercredi" => "Mittwoch", "Jeudi" => "Donnerstag", "Vendredi" => "Freitag", "Samedi" => "Samstag", "Dimanche" => "Sonntag" ) ; Pour ajouter ce nouveau tableau dans $TradJoursMois nous n'aurions qu'à écrire quelque part dans notre programme, en dehors de toute déclaration du tableau (elle est déjà faite) : $TradJoursMois["NomJourAllemand"] = $JourSemaineAll ; Le simple fait d'écrire ça, pour un tableau existant
(déjà déclaré, rempli ou non) signifie pour
PHP : "tu crées un nouveau casier dans $TradJoursMois,
tu lui colles une étiquette sur laquelle il sera marqué
"NomJourAllemand" et dans ce casier,
tu y ranges $JourSemaineAll." Maintenant, notre tableau associatif à deux dimensions $TradJoursMois prend la forme suivante : array(3) { ["NomJour"]=> array(7) { ["Monday"]=> string(5) "Lundi" ["Tuesday"]=> string(5) "Mardi" ["Wednesday"]=> string(8) "Mercredi" ["Thursday"]=> string(5) "Jeudi" ["Friday"]=> string(8) "Vendredi" ["Saturday"]=> string(6) "Samedi" ["Sunday"]=> string(8) "Dimanche" } ["NomMois"]=> array(12) { ["January"]=> string(7) "janvier" ["February"]=> string(7) "février" ["March"]=> string(4) "mars" ["April"]=> string(5) "avril" ["May"]=> string(3) "mai" ["June"]=> string(4) "juin" ["July"]=> string(7) "juillet" ["August"]=> string(4) "août" ["September"]=> string(9) "septembre" ["October"]=> string(7) "octobre" ["November"]=> string(8) "novembre" ["December"]=> string(8) "décembre" } ["NomJourAllemand"]=> array(7) { ["Lundi"]=> string(6) "Montag" ["Mardi"]=> string(8) "Dienstag" ["Mercredi"]=> string(8) "Mittwoch" ["Jeudi"]=> string(10) "Donnerstag" ["Vendredi"]=> string(7) "Freitag" ["Samedi"]=> string(7) "Samstag" ["Dimanche"]=> string(7) "Sonntag" } } |
Comment accéder
au contenu d'un tableau associatif à deux dimensions
Nous savons accéder au contenu des postes d'un tableau associatif
à une dimension. Pour un tableau associatif à deux dimensions,
c'est exactement la même chose, sauf qu'en plus de spécifier
le libellé de l'étiquette du casier (la clé du
poste), il faudra en plus dire dans quel poste primaire du tableau général
il faut aller chercher. print ("En Anglais, Monday veut dire " .$TradJoursMois['NomJour']['Monday'] . " alors que Lundi se traduit en Allemand par " .$TradJoursMois['NomJourAllemand']['Lundi']) ; Ce qui donne le résultat suivant : "En Anglais, Monday veut dire Lundi alors que Lundi se traduit en Allemand par Montag" Examinons l'instruction : $TradJoursMois['NomJour']['Monday']
signifie pour PHP : Dans le tableau $TradJoursMois,
va dans le poste qui porte l'étiquette 'NomJour'
et dans ce poste (qui est lui même un tableau), va chercher la
valeur contenue dans le casier (le poste) qui porte l'étiquette
'Monday'. Le résultat est "Lundi".
puis : $TradJoursMois['NomJourAllemand']['Lundi']
signifie pour PHP : Dans le tableau $TradJoursMois,
va dans le poste qui porte l'étiquette 'NomJourAllemand'
et dans ce poste (qui est lui même un tableau), va chercher la
valeur contenue dans le casier (le poste) qui porte l'étiquette
'Lundi'.
Le résultat est "Montag". C'est pas plus compliqué que ça. |
Comment modifier
le contenu d'un poste d'un tableau associatif à deux dimensions
Là encore, il faut et il suffit de connaître le libellé de l'étiquette du poste à modifier et le libellé de l'étiquette du poste dans lequel se trouve ce poste. Supposons par exemple que nous voulions supprimer la majuscule pour le jour en Français et remplacer "Lundi" par "lundi", dans le poste qui porte l'étiquette "Monday", lui même contenu dans le poste 'NomJour' du tableau $TradJoursMois. Il suffit d'écrire : $TradJoursMois['NomJour']['Monday'] = "lundi" ; Et le tour est joué. La nouvelle valeur "lundi"
a remplacé (on dit aussi "écrasé") l'ancienne
valeur qui était "Lundi" dans le casier
portant l'étiquette "Monday"
du poste 'NomJour'
du tableau $TradJoursMois.
|
Comment rajouter un poste
à un tableau associatif à deux dimensions
Ca, en fait, nous l'avons déjà vu au chapitre Comment remplir un tableau associatif à deux dimensions en ajoutant le tableau"$JourSemaineAll" à notre tableau. Mais ça n'est pas mauvais de revenir dessus. Pour rajouter un poste à un tableau associatif comme le nôtre, il suffit d'inventer un nouveau nom d'étiquette, de spécifier dans quel poste il faut rajouter ce nouveau casier, et de dire à PHP de se débrouiller. Par exemple, pour ajouter en allemand la traduction d'un jour "Férié" (frei), nous pourrions poursuivre notre oeuvre en écrivant : $TradJoursMois['NomJourAllemand']['Férié'] = "Frei" ; Le simple fait d'écrire ça, pour un tableau existant (déjà déclaré, bien entendu) signifie pour PHP : "Dans le tableau $TradJoursMois, puis dans le poste 'NomJourAllemand', tu crées un nouveau casier, tu lui colles une étiquette (clé) sur laquelle il sera marqué 'Férié' et dans ce casier, tu y range la valeur "Frei". Et il le fait sans rechigner (encore une chance...). Peu importe l'ordre dans lequel nous créons de nouveaux postes, ni à quel niveau. PHP gère tout ça tout seul. Le tout pour nous, est de bien se souvenir des noms que nous donnons à nos étiquettes, pour pouvoir relire ce que nous avons mis comme valeur dans les casiers correspondants.
|
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.