Principes de programmation
Tableaux++
2526 · Dekens Antoine
Tableaux associatifs
C'est quoi ?
Jusqu'ici nous avons vu comment déclarer une liste d'éléments qui se suivent. Pourtant il est possible de stocker des informations sous la forme de clé => valeur, c'est ce qu'on appelle un tableau associatif.
Création
La création d'un tableau associatif vide est identique à celui des tableaux normaux :
// Soit via la fonction array();
$arrayA = array();
// Soit avec une syntaxe courte
$arrayB = [];
Création avec élément(s)
Par contre pour créer un tableau associatif avec au moins une valeur, c'est la que notre pair clé => valeur entre en jeu : chaque valeur sera associé à un terme défini arbitrairement.
// On crée un tableau associatif avec une première pair clé => valeur.
$pokemon = [
"name" => "Pikachu"
];
Ajouter une valeur
Pour ajouter un élément dans un tableau associatif, plus besoin d'utiliser la fonction array_push. On peut directement cibler notre tableau et lui passer entre crochet une clé et lui affecter une valeur :
// On crée un tableau associatif avec une première pair clé => valeur.
$pokemon = [
"name" => "Pikachu"
];
// Ajoute la clé "weight" avec une valeur numérique de 4
$pokemon[ 'weight' ] = 4;
Modifier une valeur
Pour modifier une valeur, il suffit d'utiliser la même syntaxe que pour ajouter une clé. Si elle n'existe pas elle sera bien sûr ajoutée :
// On crée un tableau associatif avec une première pair clé => valeur.
$pokemon = [
"name" => "Pikachu"
];
// Ajoute la clé "weight" avec une valeur numérique de 4
$pokemon[ 'weight' ] = 4;
// Modifie la valeur de la clé "weight"
$pokemon[ 'weight' ] = 6;
Afficher une valeur
Pour afficher une valeur précise, plus besoin de connaître la position de notre valeur puisqu'une clé lui est attribuée. Tant que l'on connait la clé, il suffit d'utiliser la variable de notre tableau suivi de la clé souhaitée entre crochets :
// On crée un tableau associatif avec une première pair clé => valeur.
$pokemon = [
"name" => "Pikachu"
];
// Affiche 'Pikachu'
echo $pokemon[ 'name' ];
Supprimer une valeur
Que ce soit pour supprimer une variable, une entrée d'un tableau normal ou associatif, nous pouvons utiliser la fonction unset qui prend entre parenthèses un paramètre la valeur à supprimer :
$myNumber = 10;
$myArrayA = ['rouge', 'vert', 'bleu'];
$myArrayB = [
'brand' => 'reMarkable',
'name' => 'reMarkable Paper Pro'
]
// La variable $myNumber n'existe plus
unset( $myNumber );
// L'entrée 'vert' est supprimée de mon tableau
unset( $myArrayA[ 1 ] );
// La clé 'name' est supprimée de mon tableau
unset( $myArrayB[ 'name' ] );
Traverser un tableau associatif
Les boucles while et for ne pourront pas fonctionner sur ce type de tableau. Il faudra utiliser une boucle dédiée qui se nomme foreach :
$pokedex = [
"name" => "Pikachu",
"weight" => 6
];
// Boucle sur toute les clés et renvoie
// uniqment leurs valeurs pour chaque itération
foreach( $pokedex as $value ){
echo $value;
}
// Boucle sur toute les clés et renvoie
// les clés ainsi que les valeurs associées
// pour chaque itération
foreach( $pokedex as $key => $value ){
echo "La clé est $key et sa valeur est $value";
}
Exercice A
Créer un tableau associatif d'un film, qui reprend les clés suivantes et ensuite les afficher avec leurs valeurs dans un tableau HTML :
- title : Titre original du film
- year : Année de production
- director : Directeur du film
- actors : Liste des acteurs principaux (3 max, sous forme de string)
Tableaux à n dimensions
Un tableau peut en contenir d'autres, cela ajoute une dimension (ou une profondeur, un étage, etc.) :
// Un tableau à 2 dimensions
$fruits = [
[ 'pomme', 'poire', 'cerise'],
[ 'banane', 'orange', 'kiwi']
];
is_array
Pour traverser un tableau à plusieurs dimensions on doit pouvoir détecter si nos valeurs sont bien des tableaux. La fonction is_array vérifie si la variable passée en apramètre est un tableau :
// Un tableau à 2 dimensions
$fruits = [
[ 'pomme', 'poire', 'cerise'],
[ 'banane', 'orange', 'kiwi']
];
// Vérifie si $fruits est bien un tableau
// Retourne un boolean.
echo is_array( $fruits );
Traverser un tableau à n dimensions
Maintenant que nous pouvons détecter un tableau, il nous suffit d'utiliser des boucles dans des boucles. Heureusement la foreach peut aussi être utilisée pour des tableaux indexés :
// Un tableau à 2 dimensions
$fruits = [
[ 'pomme', 'poire', 'cerise'],
[ 'banane', 'orange', 'kiwi']
];
foreach( $fruits as $item ){
if( is_array( $item ) ){
foreach( $item as $subitem ){
echo $subitem;
}
} else {
echo $item;
}
}
Exercice B
Sur base du fichier manga.txt, utiliser les fonctions de lecture de fichier pour parcourir les informations et sortir un tableau à 2 dimensions et en utilisant un tableau associatif pour chaque manga.
Afficher votre tableau avec un var_dump() ou print_r()
<?php
// Voici le résultat attendu :
$mangas = [
[ 'Titre' => 'Berserk', [ 'Auteur' ] => 'Kentaro Miura', [ 'Genre(s)' ] => 'Action Aventure Fantasy Horreur' ],
[ 'Titre' => 'DanDaDan', [ 'Auteur' ] => 'Yukinobu Tatsu', [ 'Genre(s)' ] => 'Action Comédie Surnaturel' ],
[ 'Titre' => 'Wild Strawberry', [ 'Auteur' ] => 'Ire Yonemoto', [ 'Genre(s)' ] => 'Action Fantasy' ],
];
?>
Exercice C
En traversant le tableau présent sur la prochaine slide, créer un tableau associatif reprenant les 3 clés suivantes :
- total : le nombre de pokemons
- sum : la somme de leurs tailles (size)
- average: la moyenne de leurs poids (weight)
<?php
$pokemons = [
[ "name": "Pikachu", "size": 0.4, "weight": 6 ],
[ "name": "Onix", "size": 8.8, "weight": 210 ],
[ "name": "Mimitoss", "size": 1, "weight": 30 ],
[ "name": "Artikodin", "size": 1.7, "weight": 55.4 ]
]
?>