COURS PHP

  Dernière mise à jour effectuée le : Vendredi 15 août 2003    

Accueil | Les tableaux associatifs à une dimension (vecteurs)

Les tableaux associatifs à une dimension (vecteurs)



Généralités

Nous avons vu qu'il existait des tables indéxées (voir la leçon à ce sujet pour celles et ceux qui ne l'ont pas vue) et comment ils fonctionnaient.

En PHP, et c'est extrêmement pratique, il existe une autre sorte de tableau, les tableaux associatifs. Un bien grand mot pour pas grand chose en fait. J'explique :

Les tableaux sont et resteront toujours des tableaux (heureusement pour nous). Des sortes de grands meubles avec autant de casiers que l'on veut (ou à peu de chose près). Dans les tableaux indexés, il y a une étiquette sur chaque casier (un numéro) pour les repérer (ce que l'on appelle l'index, ou indice dans le cas des tableaux indexés), et on sait que l'on peut mettre tout ce qu'on veut dans un casier (type de données).

Dans les tableaux associatifs, c'est très exactement la même chose, sauf qu'à la place d'un numéro pour repérer un casier d'un autre dans le grand meuble, on a le droit d'écrire ce que l'on veut sur l'étiquette (pas tout à fait, mais presque). On appelle ces étiquettes des "clés".
Ce qui, admettez le, est quand même plus pratique qu'un numéro (quoi que...).

 



Déclaration d'un tableau associatif à une dimension

Comme tous les tableaux, PHP demande de les déclarer. Normal. Il faut bien lui dire ce que l'on veut faire et lui permettre de réserver la place nécessaire en mémoire hein ? Le pauvre...
Bref pour déclarer un tel tableau, ça n'est pas bien compliqué non plus. On fait comme d'habitude, sauf qu'on va mettre un nom sur l'étiquette (la clé) tout de suite à la place du bête numéro pas pratique. Nous allons prendre comme exemple, un tableau de correspondance entre le nom des jours en Anglais et leur équivalent en Français. Pas bête hein ? Non seulement ça va nous servir dans nos programmes, mais en plus ça va vous faire apprendre un peu d'Anglais ! Mais vi, mais vi ! Y faut !

Comme nous savons d'emblé ce que nous allons mettre dans notre tableau, autant le remplir tout de suite lors de sa déclaration. Nous écrirons donc :

$JourSemaine = array("Monday" => "Lundi", "Tuesday" => "Mardi", "Wednesday" => "Mercredi", "Thursday" => "Jeudi", "Friday" => "Vendredi", "Saturday" => "Samedi", "Sunday" => "Dimanche") ;

Voila. Maintenant, nos seulement vous avez un tableau indexé, mais en plus vous connaissez les jours en Anglais et leur taduction en Français. Pédagogique ça non ? Alors maintenant, quelques explications :

$JourSemaine est le nom que NOUS, programmeur avons décidé de donner à notre tableau. Je rappelle que toutes les variables, tableau ou pas, doivent obligatoirement commencer par un $.
Ensuite vient le fameux = array() suivi de ses parenthèses, qui veut dire pour PHP : "attention, c'est un tableau".
Entre les parenthèses, on donne le nom de l'étiquette (la clé) que l'on colle sur chaque casier de notre tableau, puis à l'aide du signe => ("signe égal" suivi de "plus grand que"), on dit ce que l'on met comme valeur dans ce casier. Par exemple :

"Monday" => "Lundi",

signifie pour PHP : tu crée un casier, tu y colle une étiquette avec marqué dessus "Monday", et dans ce casier, tu y ranges la valeur "lundi".
Soyez rassurés, PHP se débrouille tout seul pour créer un casier dans le tableau, et y ranger la valeur que vous désirez. Vous n'avez plus à vous soucier de quel numéro porte le casier. Savoir si c'est le premier, le dernier ou s'il se trouve au milieu du tableau. Fini les trucs qui commencent à "0" ! On est tranquile.
La virgule, à la fin de cette instruction, signifie qu'on va demander à PHP de créer d'autres casiers dans notre tableau et d'y mettre d'autres valeurs. Quand on aura fini d'étiquetter et de remplir des casiers, on ferme tout simplement la parenthèse et on n'oublie surtout pas le fameux ";" (point virgule) qui termine l'instruction entière.
Notez que les étiquettes sont entre guillemets, ce qui signifie que ce sont des chaînes de caractères. Les valeurs aussi, sont entre guillemets, car ce sont également des chaînes de caractères que nous avons rangé dans les casiers. Nous aurions pu y ranger n'importe quoi d'autre.

 



Comment remplir un tableau associatif à une dimension

Nous venons de voir une première méthode au paragraphe précédent, pour remplir un tableau associatif à une dimension lors de sa délaration. 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. Par exemple, si nous voulions en plus, dans le même tableau, associer les jours de la semaine en Espagnol à leur équivalent Français, nous n'aurions qu'à écrire quelque part dans notre programme, en dehors de toute déclaration du tableau (elle est déjà faite) :

$JourSemaine["Lunes"] = "lundi" ;

Le simple fait d'écrire ça, pour un tableau existant (déjà déclaré, rempli ou non) signifie pour PHP : "tu crée un casier, tu lui colle une étiquette sur laquelle il sera marqué "Lunes" et dans ce casier, tu y range la valeur "lundi".
Remarquez que l'on n'utilise plus le signe "=>". Il ne s'utilise que lors de la déclaration du tableau. Non. On utilise tout simplement le signe d'assignation ordinaire, le signe "=" tout seul, comme pour n'importe quelle variable standard.

 

 



Comment accéder au contenu d'un tableau associatif à une dimension

Les postes (les casiers) d'un tableau associatif sont comme des variables ordinaires. Ils portent un nom, et ont un contenu. La particulairté, c'est que chaque casier porte une étiquette accollée au nom du tableau. Donc, pour avoir accès au contenu d'un casier particulier, il suffit de connaître le libellé de son étiquette. Par exemple, nous pourrons écrire la chose suivante :

echo "Monday en Anglais, veut dire ".$JourSemaine["Monday"] ;

ce qui ferait apparaître à l'écran :

Monday en Anglais, veut dire Lundi

Ou plus simplement encore, si nous voulons transférer, dans une autre variable, le contenu du casier qui porte l'étiquette "Monday", par exemple la variable $LeJour, il faudrait écrire :

$LeJour = $JourSemaine["Monday"] ;

Ce qui se lit : $LeJour égal $JourSemaine d'indice Monday. Et le contenu du poste passe dans la variable. Bien entendu, le contenu du poste reste tel quel. Il ne bouge pas.

 



Comment modifier le contenu d'un poste d'un tableau associatif à une dimension

Là encore, il faut et il suffit de connaître le libellé de l'étiquette du poste à modifier. 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". Il suffit d'écrire :

$JourSemaine["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".
On ne peut pas dire que ce soit très compliqué hein ? Même moi j'y arrive. Alors...

 



Comment rajouter un poste à un tableau associatif à une dimension

Ca, en fait, nous l'avons déjà vu au chapitre Comment remplir un tableau associatif à une dimension en ajoutant le casier "Lunes" à 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 et de dire à PHP de se débrouiller. Par exemple, pour continuer les noms en Espagnol, nous pourrions poursuivre notre oeuvre en écrivant :

$JourSemaine["Miercoles"] = "Mercredi" ;

Le simple fait d'écrire ça, pour un tableau existant (déjà déclaré, bien entendu) signifie pour PHP : "tu crée un casier, tu lui colle une étiquette (clé) sur laquelle il sera marqué "Miercoles" et dans ce casier, tu y range la valeur "Mercredi". Et il le fait sans rechigner (encore une chance...).

Notez au passage que j'ai allègrement sauté "Mardi" (parce que je ne me souviens plus comment ça se dit et que j'ai la flemme d'aller regarder dans mon vieux dico d'Espagnol). Mais ça ne dérange aucunement PHP. C'est nous qui décidons du nom de l'étiquette et de ce que nous mettons dans les postes que nous créons. PHP gère tout ça de main de maître. 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.