Le casier numéroté
Un tableau indexé, c'est une rangée de casiers numérotés à partir de 0 : $villes[0] = 'Fès', $villes[1] = 'Safi'.
Créer et parcourir des tableaux indexés et associatifs, des tableaux de tableaux (comme les lignes d'une table), les fonctions utiles (count, in_array, sort, array_filter, array_map, array_sum) et l'affichage en HTML.
Une page de Souk Atlas ne manipule presque jamais une seule valeur : une liste de produits, un panier, les lignes d'une commande. En PHP, tout cela se range dans des tableaux. Ce sont aussi des tableaux que PDO renverra quand on lira la base de données (leçon C.1).
Un tableau indexé : des casiers numérotés à partir de 0. $villes[1] vaut « Safi ».
$villes = ["Fès", "Safi", "Agadir"];
echo $villes[0]; // Fès
$villes[] = "Tanger"; // ajout à la fin (indice 3)
$villes[1] = "Essaouira"; // remplacement
echo count($villes); // 4
unset($villes[2]); // suppression (les indices ne sont pas renumérotés)
$produit = [
'nom' => 'Savon noir',
'prix' => 30,
'stock' => 120,
];
echo $produit['nom']; // Savon noir
$produit['prix'] = 35; // modification
$produit['categorie'] = 'Cosmétique'; // nouvelle clé
foreach ($produit as $cle => $valeur) {
echo "$cle : $valeur<br>";
}
Fonctions utiles : array_key_exists('prix', $produit) (ou isset($produit['prix'])), array_keys(), array_values(), in_array($valeur, $tableau).
$produits = [
['id' => 1, 'nom' => 'Tajine décoré', 'prix' => 180],
['id' => 4, 'nom' => "Huile d'argan", 'prix' => 120],
['id' => 5, 'nom' => 'Savon noir', 'prix' => 30],
];
echo $produits[1]['nom']; // Huile d'argan
$prixListe = array_column($produits, 'prix'); // [180, 120, 30]
$total = array_sum($prixListe); // 330
$chers = array_filter($produits, fn($p) => $p['prix'] > 100);
$noms = array_map(fn($p) => strtoupper($p['nom']), $produits);
usort($produits, fn($a, $b) => $a['prix'] <=> $b['prix']); // du moins cher au plus cher
L’opérateur <=> (« vaisseau spatial ») renvoie -1, 0 ou 1 : c’est exactement ce qu’attend usort.
echo $tableau; affiche seulement « Array » (avec un avertissement « Array to string conversion »). Pour voir le contenu :
print_r($t) : lisible, à entourer de <pre>...</pre> dans une page ;var_dump($t) : avec les types et les longueurs ;json_encode($t) : une ligne au format JSON, très pratique pour les API (leçon D.2).Un tableau indexé, c'est une rangée de casiers numérotés à partir de 0 : $villes[0] = 'Fès', $villes[1] = 'Safi'.
Un tableau associatif, c'est une fiche avec des rubriques nommées : ['nom' => 'Savon noir', 'prix' => 30]. On ne cherche plus la case n° 1, mais la case 'prix'.
La page s'affichera ici.
Le navigateur demandera /panier.php au serveur, qui exécutera le PHP et renverra du HTML.
Consignes 0 / 3
À partir de $ventes = [1200, 0, 450, 980, 0, 1530, 700] (une valeur par jour), affichez le total, la moyenne, la meilleure journée et le nombre de jours sans vente.
<?php $ventes = [1200, 0, 450, 980, 0, 1530, 700]; $total = array_sum($ventes); $moyenne = round($total / count($ventes), 2); $max = max($ventes); $sansVente = count(array_filter($ventes, fn($v) => $v === 0)); echo "Total $total DH, moyenne $moyenne DH, meilleur jour $max DH, $sansVente jours sans vente";
$prix = ['Tajine' => 180, 'Savon' => 30, 'Tapis' => 1200]. Affichez les produits du moins cher au plus cher, puis par ordre alphabétique.
<?php $prix = ['Tajine' => 180, 'Savon' => 30, 'Tapis' => 1200]; asort($prix); // trie par valeur en gardant les clés print_r($prix); // Savon 30, Tajine 180, Tapis 1200 ksort($prix); // trie par clé print_r($prix); // Savon, Tajine, Tapis
À partir d'une liste de clients ['nom' => ..., 'ville' => ...], construisez un tableau $parVille où chaque ville contient la liste de ses clients.
<?php $clients = [ ['nom' => 'Amina', 'ville' => 'Fès'], ['nom' => 'Youssef', 'ville' => 'Casablanca'], ['nom' => 'Karim', 'ville' => 'Fès'], ]; $parVille = []; foreach ($clients as $c) { $parVille[$c['ville']][] = $c['nom']; } print_r($parVille); // ['Fès' => ['Amina', 'Karim'], 'Casablanca' => ['Youssef']]