Par Valentin Brosseau / @c4software
$_GET, $_POST, $_SESSION, $_SERVER
Ce sont tous des tableaux.
Depuis le TP 1 vous manipulez des tableaux sans le savoir.
$subjects = array('PHP', 'SQL', 'Réseau');
echo $subjects[0]; // PHPcount($subjects) donne 3.$student = array(
'prenom' => 'Bart',
'nom' => 'Simpson',
'age' => 10,
);
echo $student['prenom']; // BartLa clé porte du sens, c'est tout de suite plus lisible.
Skinner veut le carnet de notes de sa classe.
30 élèves, 4 matières.
Question : combien de variables faut-il si on n'utilise que des variables simples ?
$prenom1, $nom1, $notePhp1, $prenom2, $nom2…
Environ 180 variables, et impossible à parcourir avec une boucle.
Il nous faut autre chose.
$students = array(
array('prenom' => 'Bart', 'nom' => 'Simpson'),
array('prenom' => 'Lisa', 'nom' => 'Simpson'),
);Une case du tableau contient un autre tableau : c'est un tableau à plusieurs dimensions.
$students[1]['prenom']; // LisaOn lit de gauche à droite : la case 1, puis dans cette case la clé prenom.
Et on peut descendre encore : $students[1]['notes']['php'].
echo '<pre>';
print_r($students);
echo '</pre>';Votre meilleur ami du TP : print_r() affiche la structure complète.
Le <pre> sert juste à garder l'indentation lisible.
foreach ($students as $student) {
foreach ($student['notes'] as $subject => $note) {
echo $subject . ' : ' . $note;
}
}Un foreach par niveau. Question : que vaut $student au premier tour ?
$student vaut le tableau complet du premier élève.
Pas une chaîne, pas un nombre : un tableau, avec ses clés prenom, nom, notes.
C'est pour ça qu'on peut refaire un foreach dessus.
count($notes); // combien de notes
array_sum($notes); // la somme des notes
in_array('php', $subjects); // la matière existe ?Une moyenne, c'est donc array_sum($notes) / count($notes).
$students = $pdo->query('SELECT * FROM eleves')
->fetchAll(PDO::FETCH_ASSOC);Question : quelle est la structure de $students après cette ligne ?
Un tableau numéroté de tableaux associatifs.
Une case par ligne de la table, une clé par colonne.
Autrement dit : ce que vous manipulez depuis le début de la séance.
Les pages affichent une structure, pas une source.
common/data.php : ça marche.Le carnet de notes de Springfield :
$students[0]['notes']['php'] : un crochet par niveau.foreach par niveau, et print_r() quand on est perdu.count(), array_sum(), in_array() évitent d'écrire des boucles inutiles.Place au TP 🚀