MODULE 03

Tableaux & Chaînes

array_map, filter, reduce, manipulation de chaînes et expressions régulières.

1 Tableaux indexés

<?php
// Création
$fruits = ['pomme', 'banane', 'cerise'];
$vide   = [];

// Ajout
$fruits[] = 'datte';           // en fin
array_push($fruits, 'figue');  // équivalent
array_unshift($fruits, 'abricot'); // en début

// Suppression
$dernier = array_pop($fruits);   // retire et retourne le dernier
$premier = array_shift($fruits); // retire et retourne le premier

// Vérification
echo count($fruits);             // nombre d'éléments
echo in_array('pomme', $fruits); // 1 (true)

// Tri
sort($fruits);          // tri ascendant (réindexe les clés)
rsort($fruits);         // tri descendant
shuffle($fruits);       // mélange aléatoire

// Découper / fusionner
$tranche = array_slice($fruits, 1, 2);   // sous-tableau
$fusion  = array_merge($fruits, ['kiwi']); // fusion

2 Tableaux associatifs

<?php
$user = [
    'nom'   => 'Alice',
    'age'   => 30,
    'ville' => 'Paris',
    'roles' => ['admin', 'editor'],
];

// Accès
echo $user['nom'];          // Alice
echo $user['roles'][0];     // admin

// Ajout / modification
$user['email'] = 'alice@example.com';

// Suppression
unset($user['ville']);

// Clés et valeurs
$cles   = array_keys($user);
$valeurs = array_values($user);

// Vérifier l'existence
echo array_key_exists('nom', $user);  // 1
echo isset($user['nom']);             // 1 (mais false si null)

// Tri par valeur (asort) ou par clé (ksort)
asort($user);   // trie par valeur, conserve les clés
ksort($user);   // trie par clé

// Inverser clés ↔ valeurs
$inverse = array_flip(['a' => 1, 'b' => 2]); // [1=>'a', 2=>'b']

3 Tableaux multidimensionnels

<?php
$produits = [
    ['id' => 1, 'nom' => 'PHP Basics',  'prix' => 29.99, 'categorie' => 'livre'],
    ['id' => 2, 'nom' => 'Clavier Meca', 'prix' => 89.99, 'categorie' => 'hardware'],
    ['id' => 3, 'nom' => 'Clean Code',  'prix' => 34.99, 'categorie' => 'livre'],
];

// Parcourir
foreach ($produits as $prod) {
    echo "{$prod['nom']} : {$prod['prix']}€\n";
}

// array_column — extraire une colonne
$noms  = array_column($produits, 'nom');
$parId = array_column($produits, null, 'id'); // indexer par id

// Trier par prix avec usort
usort($produits, fn($a, $b) => $a['prix'] <=> $b['prix']);

4 Fonctions array_ essentielles

<?php
$nombres = [1, 2, 3, 4, 5, 6];

// array_map — transformer chaque élément (retourne un nouveau tableau)
$doubles = array_map(fn($n) => $n * 2, $nombres); // [2,4,6,8,10,12]

// array_filter — garder les éléments qui passent le test
$pairs = array_filter($nombres, fn($n) => $n % 2 === 0); // [1=>2, 3=>4, 5=>6]
$pairs = array_values($pairs); // réindexer : [0=>2, 1=>4, 2=>6]

// array_reduce — réduire à une seule valeur
$somme = array_reduce($nombres, fn($carry, $n) => $carry + $n, 0); // 21
$produit = array_reduce($nombres, fn($carry, $n) => $carry * $n, 1); // 720

// array_unique — supprimer les doublons
$unique = array_unique([1, 2, 2, 3, 3, 3]); // [0=>1, 1=>2, 3=>3]

// array_chunk — découper en sous-tableaux
$pages = array_chunk($nombres, 2); // [[1,2],[3,4],[5,6]]

// array_combine — associer clés et valeurs
$keys = ['a', 'b', 'c'];
$vals = [1, 2, 3];
$assoc = array_combine($keys, $vals); // ['a'=>1, 'b'=>2, 'c'=>3]

// array_search — trouver la clé d'une valeur
$cle = array_search(3, $nombres); // 2 (index)

// Trier par clé personnalisée avec usort
$users = [['age'=>30],['age'=>20],['age'=>25]];
usort($users, fn($a,$b) => $a['age'] <=> $b['age']); // du plus jeune au plus âgé
💡 array_map + array_filter + array_reduce sont les 3 piliers de la programmation fonctionnelle sur les tableaux. Maîtrisez-les !

5 Manipulation de chaînes

<?php
$str = "  Bonjour, Monde !  ";

// Nettoyage et casse
echo trim($str);            // "Bonjour, Monde !"
echo strtolower($str);      // "  bonjour, monde !  "
echo strtoupper($str);      // "  BONJOUR, MONDE !  "
echo ucfirst("hello");      // "Hello"
echo ucwords("hello world"); // "Hello World"

// Recherche et remplacement
echo strpos("Bonjour", "jour");     // 3 (false si absent)
echo strrpos("abcabc", "b");        // 4 (dernière occurrence)
echo str_replace("Monde", "PHP", "Bonjour, Monde !"); // "Bonjour, PHP !"
echo str_ireplace("monde", "PHP", "Bonjour, Monde !"); // insensible à la casse

// Extraction
echo substr("Bonjour", 3, 4);   // "jour"
echo strlen("Bonjour");         // 7

// Découper / assembler
$parts = explode(",", "a,b,c"); // ['a','b','c']
$str   = implode(" - ", $parts); // "a - b - c"

// Formatage
echo sprintf("Prix : %.2f€", 9.9);     // "Prix : 9.90€"
echo str_pad("42", 5, "0", STR_PAD_LEFT); // "00042"
echo number_format(1234567.89, 2, ',', ' '); // "1 234 567,89"

// Expressions régulières
preg_match('/^\d{4}-\d{2}-\d{2}$/', '2026-01-15', $matches); // date ISO
preg_match_all('/\d+/', 'abc123def456', $m); // $m[0] = ['123','456']
$clean = preg_replace('/[^a-z0-9]/i', '-', 'Hello World!'); // "Hello-World-"