Skip to content

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 ​

  1. Créer un fichier sort.php.
  2. Définir un tableau $tasks contenant au moins 4 tâches avec les clés label, created_at et done.
  3. Trier ce tableau par date (created_at) du plus récent au plus ancien.
  4. 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; ?>