PARTIE 1 : les tableaux à 2 dimensions Déclaration d`un tableau à

Transcription

PARTIE 1 : les tableaux à 2 dimensions Déclaration d`un tableau à
COURS 05 – COMPLÉMENTS TABLEAUX
PARTIE 1 : les tableaux à 2 dimensions
Déclaration d'un tableau à deux dimensions
Comme nous l'avons vu dans la leçon sur les tableaux à une dimension , nous savons que nous
pouvons mettre absolument tout ce que l'on veut dans chaque casier de notre tableau, y compris
un autre tableau.
Exemple : tableau musique
Mozart
Chopin
Bach
verdi
ACDC
Pink Floyd
Armstrong Miles Davis
Led Zeppelin Beatles
Nirvana
Police
U2
Hampton
$musique = array(array()) ;
Écrire cela en PHP signifie : "on va créer un tableau qui s'appellera $musique dans lequel on
mettra d'autres tableaux".
Dès que nous avons déclaré ce tableau à deux dimensions, PHP a réservé en mémoire, un espace
suffisant pour y recevoir n'importe quoi. Il gère le contenu de manière dynamique, c'est-à-dire
qu'il occupera autant de place que nécessaire au fur et à mesure que nous remplirons notre
tableau.
Remplissage d'un tableau indexé à deux dimensions
Si l'on suppose que la première ligne de notre tableau (donc d'indice zéro puisque c'est le premier)
sera rempli avec les musiciens classiques, il faudra écrire :
$musique[0][0] = "Mozart" ;
$musique[0][1] = "Chopin" ;
$musique[0][2] = "Bach" ;
$musique[0][3] = "Verdi" ;
Remarque : on met d'abord le numéro de la ligne entre crochets, puis le numéro du casier.
Travail à faire : remplir les 2 lignes suivantes
Ajout d'un élément dans le tableau :
Pour ajouter un élément dans le tableau vous devez indiquer sa ligne et sa colonne. Exemple pour
ajouter « cole » à la 3 ligne du tableau et la 4 colonne :
$musique[2][3]=''Cole'';
Ou plus simplement :
$musique[2][]=''Cole'';
Que va faire l'instruction suivante :
$musique[][]=''JJ Cale'';
Afficher les éléments du tableau
Pour afficher les éléments du tableau, vous devez connaître le nombre de lignes et le nombre de
casiers de chaque ligne :
-->count($musique) affiche le nombre de lignes
-->count($musique[0]) affiche le nombre d'éléments de la ligne 1
Exemple: pour afficher tous les éléments de la ligne 2
for($i=0;$i<count($musique[1];$i++)
{
print($musique[1][$i].''\n'');
}
Travail à faire : afficher tous les éléments du tableau
Partie 2 ­ TABLEAU ASSOCIATIF
Jusqu'à présent, les tableaux que nous avons utilisés étaient indicés par des entiers, la valeur du premier indice étant zéro (comme pour les chaînes de caractères). Or, en PHP, rien n'interdit de démarrer les indices à ­1 ou +1, ­40, ...mieux, les indices peuvent être des chaînes de caractères ! Exemple :
$moyennes=array(); // création du tableau vide
$moyennes['Dupond']=10;
// affecte la valeur 10 à l'élément référencé par 'Dupond' dans le tableau $moyennes.
print count($moyennes); // affiche le nombre de couples (clé, valeur), soit 1 print($moyennes['Dupond']); // affiche 10
Une collection est un ensemble de couples (clé, valeur). Une clé est soit un entier soit une chaîne de caractères. Une valeur est une donnée quelconque (booléen, numérique, chaîne de caractères..). La valeur d'un élément d'une collection dépend donc du couple (nom de la collection, clé). Traditionnellement, on appelle tableau une collection indicée par des entiers. Exemple :
$tab = array(0 => "moi", 1 => "19­octobre­2004");
// ou $tab = array("moi", "19­octobre­2004");
// un tableau composé de 2 éléments :
// la valeur du premier élément est : $tab[0]
Pour plus de commodité, nous pouvons aussi utiliser des chaînes de caractères comme clé.
$copyleft = array("auteur" => "moi :", "date" => "19­octobre­2004");
Comme pour les indices entier, il ne peut y avoir plusieurs éléments (clé, valeur) . Une telle collection nous permet d'écrire des lignes de ce type :
print("Auteur : " . $copyleft['auteur'] . "\n");
//affiche Auteur : moi
Code bien plus lisible que si nous avions indicé par des entiers :
print("Remerciement à " . $copyleft[0]);
FONCTIONS UTILES
Parcourir une collection : foreach
Comment faire pour parcourir une collection ayant des indices de type chaîne de caractères ?
PHP offre, depuis la version 4, un moyen très pratique pour parcourir une collection.
foreach(an_array as $value) bloc d'instructions
foreach(an_array as $key => $value) bloc d'instruction
Ce que dit la documentation :
La première forme passe en revue le tableau an_array. A chaque itération, la valeur de l'élément
courant est assignée à $value et le pointeur interne de tableau est avancé d'un élément (ce qui fait
qu'à la prochaine itération, on accédera à l'élément suivant).
La deuxième forme fait exactement la même chose, mais en plus la clé de l'élément courant est
assigné à la variable $key, ce qui permet de récupérer à la fois la clé et sa valeur.
Exemple :
<?php
$animaux=array("chien"=>"medor","chat"=>"minet","canard"=>"donald");
foreach ($animaux as $nom)
{
//affiche medor
print($nom."\n");
//
minet
}
//
donald
foreach ($animaux as $nom =>$value)
{
print($nom." ".$value."\n");
}
?>
//affiche chien medor
//
chat minet
//
canard donald
Tester l'existence d'une clé : array_key_exists
//Exemple :
if (array_key_exists('chien', $animaux)) {
echo "Le tableau animaux contient au moins une valeur associée à la clé chien";
} Obtenir la liste des clés : array_keys
print_r(array_keys($animaux));
Va afficher :
Array
(
[0] => chien
[1] => chat
[2] => canard
)
TABLEAU ASSOCIATIF A DEUX DIMENSIONS :
Exemple :
Mozart
Chopin
Bach
verdi
ACDC
Pink Floyd Led Zeppelin Beatles Nirvana U2
Armstrong Miles Davis Hampton
<?php
$musique=array(
"classique"=>array("mozart","chopin","bach","verdi"),
"rock"=>array("acdc","pink floyd","led zeppelin","beatles","nirvana","u2"),
"jazz"=>array("armstrong","miles davis","hampton")
);
?>
Parcourir un tableau à 2 dimensions : foreach
// une première boucle pour parcourir l'ensemble des clés
foreach ($musique as $cle => $valeurs) {
print("mes disques : ".$cle."\n"); // on affiche la clé
//une deuxième boucle pour parcourir toutes les valeurs associées à une clé
foreach ($musique[$cle] as $nom){
print($nom."\n");
}
}
Ce qui affichera :
mes disques : classique
mozart
chopin
bach
verdi
mes disques : rock
acdc
pink floyd
led zeppelin
beatles
nirvana
u2
mes disques : jazz
armstrong
miles davis
hampton