Aller au contenu
M07 · B. Programmer en PHP

Fonctions sur les chaînes de caractères et les dates

Mesurer, nettoyer, découper, chercher et remplacer dans un texte (avec les accents), formater des nombres, puis afficher, calculer et comparer des dates avec date(), strtotime() et DateTime.

1Situer

Un client tape « amina.BENALI@Mail.ma » avec des espaces et des majuscules ; un produit doit afficher un résumé de 60 caractères ; une commande indique « livrée dans 3 jours ». Le texte et les dates sont partout sur un site : PHP fournit des fonctions toutes prêtes pour les manipuler.

2Comprendre

Les fonctions de chaînes sur « Savon noir »
S0 a1 v2 o3 n4 5 n6 o7 i8 r9 $p = "Savon noir" echo $p Savon noir la chaîne d'origine

La chaîne $p = "Savon noir" : chaque caractère a une position, à partir de 0.

1 / 5

Mesurer et transformer un texte

FonctionRôleExemple → résultat
strlen($s) / mb_strlen($s)longueur (octets / caractères)mb_strlen("Fès") → 3
strtoupper / mb_strtouppermajusculesmb_strtoupper("fès") → FÈS
strtolowerminuscules"SAFI" → safi
ucfirst / ucwordsmajuscule au début / à chaque motucwords("nadia amrani") → Nadia Amrani
trim($s)enlève espaces au début et à la fin" Fès " → Fès
str_padcomplète à une longueurstr_pad("7", 3, "0", STR_PAD_LEFT) → 007

Chercher, extraire, remplacer

$tel = "06 12-34 56 78";
echo str_replace([" ", "-"], "", $tel);          // 0612345678

$desc = "Tajine en terre cuite décoré à la main";
echo mb_substr($desc, 0, 20) . "…";              // Tajine en terre cuit…
var_dump(str_contains($desc, "terre"));          // bool(true)
var_dump(strpos($desc, "Tajine"));               // int(0)

Découper et assembler

$villes = explode(",", "Fès,Safi,Agadir");   // ["Fès", "Safi", "Agadir"]
echo count($villes);                          // 3
echo implode(" · ", $villes);                 // Fès · Safi · Agadir

Pour mettre en forme des nombres : number_format(1200.5, 2, ',', ' ') donne 1 200,50, et sprintf("%05d", 42) donne 00042.

Les dates avec date() et strtotime()

LettreSignificationExemple
djour sur 2 chiffres03
mmois sur 2 chiffres02
Yannée sur 4 chiffres2025
H / i / sheure / minutes / secondes14:05:09
Njour de la semaine (1 = lundi)1
tnombre de jours du mois28
echo date('d/m/Y H:i');                          // 03/02/2025 14:05
echo date('d/m/Y', strtotime('+3 days'));        // dans 3 jours
echo date('d/m/Y', strtotime('2024-02-03'));     // 03/02/2024

Le fuseau horaire se règle dans php.ini (date.timezone = Africa/Casablanca) ou avec date_default_timezone_set('Africa/Casablanca');.

La classe DateTime

$naissance = new DateTime('2001-11-20');
$aujourdhui = new DateTime('today');
$ecart = $naissance->diff($aujourdhui);
echo "Âge : {$ecart->y} ans";

$echeance = new DateTime('2025-01-31');
$echeance->modify('+1 month');
echo $echeance->format('d/m/Y');      // 03/03/2025 (31 février n'existe pas !)
Exemple simple

Le tailleur

trim() coupe les fils qui dépassent (les espaces au début et à la fin), strtoupper() met tout en majuscules comme sur une étiquette, substr() découpe un morceau du tissu.

Exemple simple

Le calendrier du livreur

La commande part aujourd'hui ; la livraison prend 3 jours. Plutôt que de compter sur ses doigts (et de se tromper en fin de mois), on demande à PHP : date('d/m/Y', strtotime('+3 days')).

3Manipuler

Le formulaire d'inscription envoie des données mal saisies. Nettoyez-les avec les fonctions de chaînes, puis calculez les dates demandées.
Pas à pas dans le lab ↗ Cliquez sur Exécuter : PHP 8.3 démarre dans votre navigateur (environ 5 Mo à télécharger, une seule fois).

La page s'affichera ici.

Le navigateur demandera /index.php au serveur, qui exécutera le PHP et renverra du HTML.

Entre le navigateur et le serveur aucun échange pour l'instant

Consignes 0 / 5

  1. « Client : EL IDRISSI »
  2. « Email : youssef.idrissi@mail.ma »
  3. « Tél : 0612345678 »
  4. Le résumé : « Tajine en terre cuite décoré à… » (30 caractères, accents compris, puis …)
  5. « Inscrit le 03/02/2024 »

4Pratiquer

Exercice 1 · Initiales

À partir de $client = « nadia amrani », affichez « Nadia Amrani » puis les initiales « N.A. ».

Voir le corrigé
<?php
$client = "nadia amrani";
echo ucwords($client), "<br>";                 // Nadia Amrani
$parties = explode(" ", $client);
$initiales = "";
foreach ($parties as $p) {
    $initiales .= strtoupper($p[0]) . ".";
}
echo $initiales;                               // N.A.

Exercice 2 · Âge et ancienneté

Calculez l'âge d'un client né le 2001-11-20 et le nombre de jours depuis son inscription le 2025-01-12, avec DateTime et diff().

Voir le corrigé
<?php
$aujourdhui = new DateTime('today');
$age = (new DateTime('2001-11-20'))->diff($aujourdhui)->y;
$jours = (new DateTime('2025-01-12'))->diff($aujourdhui)->days;
echo "Âge : $age ans, client depuis $jours jours";

Exercice 3 · Référence de commande

Fabriquez une référence du type « CMD-2025-00042 » à partir de l'année en cours et du numéro 42.

Voir le corrigé
<?php
$numero = 42;
$ref = sprintf("CMD-%s-%05d", date('Y'), $numero);
echo $ref;   // CMD-2025-00042 (avec l'année en cours)

5Vérifier

1. strlen("Fès") renvoie :
2. Que renvoie explode(",", "Fès,Safi,Agadir") ?
3. Dans date('d/m/Y'), que représente m ?