M1 DILIPEM – virginie.zampa.free.fr -- virginie.zampa@univ-grenoble-alpes.fr
PHP – 5
Les tableaux … suite Les tableaux associatifs
Les tableaux associatifs fonctionnent de la même façon que les tableaux indexés numériquement, à la différence qu'ils utilisent non plus des numéros comme indices, mais des étiquettes (ou mots) comme clés, que nous allons spécifier pour faire référence à une entrée du tableau.
Stockage des donnés d'un étudiant dans un tableau associatif :
$etu = array( "nom"=>"Bard" , "prenom"=> "Jo" , "n_etu"=>"20731827") ;
Il est possible de créer le tableau pas à pas, comme pour les tableaux indexés numériquement :
$etu["nom"]= "Bard" ;
$etu["prenom"]= "Jo" ;
$etu["n_etu"]= "20731827" ;
1. Afficher un tableau associatif
Cela fonctionne comme pour un tableau indexé numériquement, mais la clé sera un mot et pas un nombre.
1. print $etu["nom"] ; // Affiche Bard
Généralement on aura des éléments de même type dans un tableau indexé numériquement et plusieurs éléments qui composent une même donnée dans un tableau associatif.
Exemple :
$fruits=array("banane", "pomme, "poire") ;
$fruit=array ("nom"=> "banane", "couleur"=> "jaune") ;
2. Afficher un tableau associatif (bis)
Nous n'avons vu pour les tableaux associatifs qu'un affichage pas à pas où l'on doit toujours spécifier la clé de l'élément à afficher, ce qui peut être long et pas très pratique si l'on ne connaît pas toutes les clés du tableau (ce qui peut souvent arriver avec un tableau créé dynamiquement), ou si l'on s'en fiche et qu'on veut seulement afficher l'intégralité du tableau.
Il existe donc une autre boucle, la boucle foreach (littéralement "pour chaque"), qui peut être utilisée pour l'affichage des tableaux, indexés numériquement ou associatifs.
La boucle foreach parcourt chaque ligne du tableau et à chaque tour stocke l'élément considéré dans une sorte de variable temporaire, dont il faut définir le nom.
foreach ( $nom_tableau as $item ) {
print $item ; /* On ne mentionne pas le nom du tableau, seulement le nom de la variable temporaire que nous avons nommée ici $item. */
}
M1 DILIPEM – virginie.zampa.free.fr -- virginie.zampa@univ-grenoble-alpes.fr
3. Affichage de la clé et de la valeur associée
foreach ( $nom_tableau as $cle=>$valeur ) { print $cle. ":".$valeur. . "<br/>" ;
} // affichera chaque couple clé : valeur
4. Tableau de tableaux
Un tableau peut contenir dans ses entrées un autre tableau. Un tableau associatif simple est suffisant pour stocker les informations d'un étudiant par exemple, mais pas pour stocker les informations de tous les étudiants d'une classe. Dans ce cas, on peut créer un tableau qui contient des éléments de type tableau.
Exemples de construction d'un tableau de tableaux :
$etu[] = array("nom"=>"Bard" , "prenom"=>"Jo" , "n_etu"=>"20731827") ;
$etu[] = array("nom"=>"" , "prenom"=>"" , "n_etudiant"=>"20731845") ; Ou encore
$etu1 = array("nom"=>"Bard" , "prenom"=>"Jo" , "n_etu"=>"20731827") ;
$etu2 = array("nom"=>"" , "prenom"=>"" , "n_etu"=>"20731845") ;
$etudiants = array( $etu1, $etu2) ; Affichage d'un tel tableau avec une boucle for
For ($i=0 ; $i<sizeof($etudiants) ; $i++) { print $etudiants[$i]['nom'] ;
print $etudiants[$i]['prenom'] ; }
Affichage d'un tel tableau avec deux foreach imbriqués foreach($etudiants as $tabEtu) {
// $tabEtu contient les éléments du tableau indexé numériquement, soit des tableaux associatifs (1 par étudiant)
// Si on connaît les clés ou on ne veut pas tout afficher, pas la peine d'utiliser un deuxième foreach, il suffit de faire référence à l'élément affiché avec sa clé print $tabEtu['nom'] ;
// Sinon, on peut utiliser un deuxième foreach, si on ne connaît pas les clés, ou si on veut tout afficher :
foreach($tabEtu as $info) { print $info ;
} }
N.B. : Une chaine de caractères peut être traitée comme un tableau indexé numériquement.
Prenons le mot chat par exemple, stocké dans une variable $mot . Pour afficher la lettre h, je peux écrire :
print $mot[1] ; // Rappel : l'indexation d'un tableau commence à 0.