Module PHP.8 – Tableaux
Objectif
Maîtriser les tableaux PHP : tableaux indexés, associatifs, multidimensionnels, et toutes les fonctions natives pour manipuler les données.
Théorie
Tableaux indexés
Tableaux avec des clés numériques (commencent à 0).
Création :
$nombres = [10, 20, 30, 40];
$nombres = array(10, 20, 30, 40); // Ancienne syntaxe
Accès :
$premier = $nombres[0]; // 10
$deuxieme = $nombres[1]; // 20
Modification :
$nombres[0] = 15; // Modifie la première valeur
$nombres[] = 50; // Ajoute à la fin
Ajout d'éléments :
$nombres[] = 50; // Ajoute à la fin
array_push($nombres, 60); // Ajoute à la fin
array_unshift($nombres, 5); // Ajoute au début
Suppression :
unset($nombres[1]); // Supprime l'élément à l'index 1
array_pop($nombres); // Retire le dernier
array_shift($nombres); // Retire le premier
Tableaux associatifs
Tableaux avec des clés personnalisées (strings).
Création :
$personne = [
"nom" => "Dupont",
"prenom" => "Jean",
"age" => 30
];
Accès :
$nom = $personne["nom"];
$age = $personne["age"];
Modification :
$personne["age"] = 31;
$personne["ville"] = "Paris"; // Ajoute une nouvelle clé
Vérifier l'existence :
if (isset($personne["email"])) {
echo $personne["email"];
}
if (array_key_exists("email", $personne)) {
echo $personne["email"];
}
Tableaux multidimensionnels
Tableaux contenant d'autres tableaux.
Création :
$etudiants = [
["nom" => "Jean", "notes" => [15, 18, 12]],
["nom" => "Marie", "notes" => [16, 17, 19]],
["nom" => "Pierre", "notes" => [10, 11, 9]]
];
Accès :
$nomPremier = $etudiants[0]["nom"]; // "Jean"
$premiereNote = $etudiants[0]["notes"][0]; // 15
Parcourir :
foreach ($etudiants as $etudiant) {
echo $etudiant["nom"] . " : ";
foreach ($etudiant["notes"] as $note) {
echo $note . " ";
}
echo "<br>";
}
Fonctions natives essentielles
Informations sur le tableau :
count($tableau); // Nombre d'éléments
sizeof($tableau); // Alias de count()
empty($tableau); // Vérifie si vide
isset($tableau[0]); // Vérifie si clé existe
array_key_exists("cle", $tableau); // Vérifie clé
Recherche :
in_array($valeur, $tableau); // Vérifie si valeur existe
array_search($valeur, $tableau); // Retourne la clé
array_keys($tableau); // Toutes les clés
array_values($tableau); // Toutes les valeurs
Tri :
sort($tableau); // Tri croissant (réindexe)
rsort($tableau); // Tri décroissant
asort($tableau); // Tri associatif (garde les clés)
arsort($tableau); // Tri associatif décroissant
ksort($tableau); // Tri par clés
krsort($tableau); // Tri par clés décroissant
Transformation :
array_map(function($item) {
return $item * 2;
}, $tableau);
array_filter($tableau, function($item) {
return $item > 10;
});
array_reduce($tableau, function($carry, $item) {
return $carry + $item;
}, 0);
Fusion :
$tableau1 = [1, 2, 3];
$tableau2 = [4, 5, 6];
$fusion = array_merge($tableau1, $tableau2);
// [1, 2, 3, 4, 5, 6]
// Avec l'opérateur (PHP 7.4+)
$fusion = [...$tableau1, ...$tableau2];
Extraction :
$slice = array_slice($tableau, 0, 3); // 3 premiers éléments
$chunk = array_chunk($tableau, 2); // Divise en groupes de 2
Clés et valeurs :
$cles = array_keys($tableau);
$valeurs = array_values($tableau);
$flip = array_flip($tableau); // Inverse clés/valeurs
Opérateur spread (PHP 7.4+)
Déstructuration :
$nombres = [1, 2, 3];
[$a, $b, $c] = $nombres;
// $a = 1, $b = 2, $c = 3
Fusion :
$tableau1 = [1, 2];
$tableau2 = [3, 4];
$fusion = [...$tableau1, ...$tableau2];
// [1, 2, 3, 4]
Arguments de fonction :
function additionner(...$nombres) {
return array_sum($nombres);
}
$nombres = [1, 2, 3];
additionner(...$nombres); // Déploie le tableau
Exercice
-
Tableaux indexés
- Créez un tableau de nombres
- Ajoutez, supprimez, modifiez des éléments
- Parcourez avec foreach
-
Tableaux associatifs
- Créez un tableau représentant une personne
- Accédez et modifiez les valeurs
- Vérifiez l'existence des clés
-
Tableaux multidimensionnels
- Créez un tableau d'étudiants avec leurs notes
- Parcourez et affichez toutes les informations
- Calculez la moyenne de chaque étudiant
-
Fonctions natives
- Testez au moins 10 fonctions différentes
- Triez, filtrez, transformez des tableaux
- Utilisez array_map, array_filter, array_reduce
-
Opérateur spread
- Utilisez la déstructuration
- Fusionnez des tableaux
- Passez des tableaux comme arguments
Quiz
-
Comment accède-t-on au premier élément d'un tableau indexé ?
- $tableau[1]
- $tableau[0]
- $tableau[first]
-
Quelle fonction ajoute un élément à la fin ?
- array_add()
- array_push() ou $tableau[] = valeur
- array_append()
-
Comment vérifier si une clé existe dans un tableau associatif ?
- in_array()
- array_key_exists() ou isset()
- exists()
-
Que fait array_map() ?
- Filtre le tableau
- Applique une fonction à chaque élément
- Trie le tableau
-
Que fait l'opérateur spread ... ?
- Multiplie le tableau
- Déploie le tableau
- Copie le tableau
Mini défi
Mission : Créer un système de gestion de données complet
Créez un système qui gère une collection de produits :
Structure de données :
$produits = [
["id" => 1, "nom" => "Laptop", "prix" => 999.99, "stock" => 5],
["id" => 2, "nom" => "Souris", "prix" => 29.99, "stock" => 20],
["id" => 3, "nom" => "Clavier", "prix" => 79.99, "stock" => 15],
// ... plus de produits
];
Fonctionnalités à implémenter :
-
Recherche
rechercherParNom($nom): Trouve les produits par nomrechercherParId($id): Trouve un produit par IDproduitsEnStock(): Liste les produits avec stock > 0
-
Tri
trierParPrix($ordre): Trie par prix (croissant/décroissant)trierParStock(): Trie par stocktrierParNom(): Trie alphabétiquement
-
Calculs
prixMoyen(): Calcule le prix moyenprixTotal(): Calcule la somme de tous les prixstockTotal(): Calcule le stock total
-
Filtres
produitsChers($seuil): Produits au-dessus d'un prixproduitsRupture(): Produits avec stock = 0produitsParGamme($min, $max): Produits dans une gamme de prix
-
Transformations
appliquerRemise($pourcent): Applique une remise à tousnomsProduits(): Extrait seulement les nomstableauPrix(): Extrait seulement les prix
Critères :
- ✅ Utilisation de fonctions natives PHP
- ✅ Code organisé en fonctions
- ✅ Gestion des cas limites (tableau vide, etc.)
- ✅ Documentation PHPDoc
- ✅ Tests avec différents scénarios
Objectif : Maîtriser les tableaux PHP et toutes les fonctions natives pour manipuler efficacement les données.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez tous les types de tableaux et les fonctions natives.