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 => "19octobre2004"); // ou $tab = array("moi", "19octobre2004"); // 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" => "19octobre2004"); 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