Trier les tâches
Objectifs pédagogiques
- Comprendre les différentes méthodes de tri d’un tableau en PHP.
- Savoir trier un tableau de tableaux selon une clé (
label,created_at,done, etc.). - Utiliser
usort()avec une fonction anonyme pour un tri personnalisé.
Introduction
Une fois que les tâches sont enrichies (label, date, statut, catégorie...), on peut vouloir les afficher dans un ordre précis.
Cela peut inclure :
- ordre alphabétique des intitulés,
- date de création (du plus récent au plus ancien),
- statut (terminé en premier, etc.).
PHP offre plusieurs fonctions de tri. Dans le cas d’un tableau associatif multidimensionnel, on utilisera usort().
Exercice pratique
- Créer un fichier
sort.php. - Définir un tableau
$taskscontenant au moins 4 tâches avec les cléslabel,created_atetdone. - Trier ce tableau par date (
created_at) du plus récent au plus ancien. - Réafficher les tâches sous forme de tableau HTML.
Correction
Visualiser la correction
Déclaration des tâches
php
<?php
$tasks = [
[
'label' => 'Faire les courses',
'done' => true,
'created_at' => '2024-07-01'
],
[
'label' => 'Réviser PHP',
'done' => false,
'created_at' => '2024-07-18'
],
[
'label' => 'Appeler Jean',
'done' => true,
'created_at' => '2024-06-25'
],
[
'label' => 'Arroser les plantes',
'done' => false,
'created_at' => '2024-07-19'
],
];Tri par date décroissante
php
usort($tasks, function ($a, $b) {
return strtotime($b['created_at']) - strtotime($a['created_at']);
});Affichage des tâches triées
php
<?php foreach ($tasks as $task): ?>
<tr>
<td class="p-4 border-b border-slate-200">
<?= htmlspecialchars($task['label']) ?>
</td>
<td class="p-4 border-b border-slate-200">
Une catégorie
</td>
<td class="p-4 border-b border-slate-200">
<div class="w-max">
<div class="relative grid items-center px-2 py-1 font-sans text-xs font-bold uppercase rounded-md select-none whitespace-nowrap <?= $task['done'] ? 'bg-green-500/20 text-green-900' : 'bg-slate-100 text-slate-500' ?>">
<span><?= $task['done'] ? 'Terminée' : 'À faire' ?></span>
</div>
</div>
</td>
<td class="p-4 border-b border-slate-200">
<?= htmlspecialchars($task['created_at']) ?>
</td>
<td class="p-4 border-b border-slate-200">
<!-- bouton d’action -->
</td>
</tr>
<?php endforeach; ?>