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; ?>