Aller au contenu principal

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

  1. Tableaux indexés

    • Créez un tableau de nombres
    • Ajoutez, supprimez, modifiez des éléments
    • Parcourez avec foreach
  2. Tableaux associatifs

    • Créez un tableau représentant une personne
    • Accédez et modifiez les valeurs
    • Vérifiez l'existence des clés
  3. Tableaux multidimensionnels

    • Créez un tableau d'étudiants avec leurs notes
    • Parcourez et affichez toutes les informations
    • Calculez la moyenne de chaque étudiant
  4. Fonctions natives

    • Testez au moins 10 fonctions différentes
    • Triez, filtrez, transformez des tableaux
    • Utilisez array_map, array_filter, array_reduce
  5. Opérateur spread

    • Utilisez la déstructuration
    • Fusionnez des tableaux
    • Passez des tableaux comme arguments

Quiz

  1. Comment accède-t-on au premier élément d'un tableau indexé ?

    • $tableau[1]
    • $tableau[0]
    • $tableau[first]
  2. Quelle fonction ajoute un élément à la fin ?

    • array_add()
    • array_push() ou $tableau[] = valeur
    • array_append()
  3. Comment vérifier si une clé existe dans un tableau associatif ?

    • in_array()
    • array_key_exists() ou isset()
    • exists()
  4. Que fait array_map() ?

    • Filtre le tableau
    • Applique une fonction à chaque élément
    • Trie le tableau
  5. 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 :

  1. Recherche

    • rechercherParNom($nom) : Trouve les produits par nom
    • rechercherParId($id) : Trouve un produit par ID
    • produitsEnStock() : Liste les produits avec stock > 0
  2. Tri

    • trierParPrix($ordre) : Trie par prix (croissant/décroissant)
    • trierParStock() : Trie par stock
    • trierParNom() : Trie alphabétiquement
  3. Calculs

    • prixMoyen() : Calcule le prix moyen
    • prixTotal() : Calcule la somme de tous les prix
    • stockTotal() : Calcule le stock total
  4. Filtres

    • produitsChers($seuil) : Produits au-dessus d'un prix
    • produitsRupture() : Produits avec stock = 0
    • produitsParGamme($min, $max) : Produits dans une gamme de prix
  5. Transformations

    • appliquerRemise($pourcent) : Applique une remise à tous
    • nomsProduits() : Extrait seulement les noms
    • tableauPrix() : 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.