logo oujood
🔍

Fonction PHP strnatcasecmp() - Comparaison d'Ordre Naturel

La fonction strnatcasecmp() compare deux chaînes en utilisant l'algorithme d'ordre naturel, sans distinction majuscules/minuscules. Idéale pour trier des chaînes contenant des nombres.

OUJOOD.COM

La Fonction strnatcasecmp() en PHP

PHP - RÉFÉRENCE DES FONCTIONS DE CHAÎNES

Disponibilité : PHP 4, PHP 5, PHP 7, PHP 8

strnatcasecmp() — Comparaison de chaînes avec l'algorithme d'ordre naturel (insensible à la casse).

Définition et Utilisation

La fonction strnatcasecmp() compare deux chaînes de caractères en utilisant un algorithme d'« ordre naturel », c'est-à-dire de la manière dont un humain comparerait naturellement des chaînes contenant des chiffres.

strnatcasecmp() implémente l'algorithme de comparaison qui ordonne les chaînes de façon intuitive, particulièrement utile pour trier des noms de fichiers ou des listes contenant des nombres. Par exemple, "fichier2.txt" sera correctement placé avant "fichier10.txt".

Cette fonction est similaire à strnatcmp(), mais avec une différence importante : la comparaison est insensible à la casse (case-insensitive), ce qui signifie que les majuscules et minuscules sont traitées de manière identique.

Valeurs de Retour

Cette fonction retourne un entier qui indique la relation entre les deux chaînes :

  • 0 - si les deux chaînes sont égales (ignorant la casse)
  • < 0 (nombre négatif) - si string1 est inférieur à string2
  • > 0 (nombre positif) - si string1 est supérieur à string2

Syntaxe

int strnatcasecmp(string $string1, string $string2)

Paramètres

Paramètre Description

string1

Requis. Spécifie la première chaîne à comparer.

string2

Requis. Spécifie la deuxième chaîne à comparer.


Notes et Remarques Importantes

Note : La fonction strnatcasecmp() ne distingue pas les majuscules des minuscules. "Hello" et "hello" seront considérés comme identiques.

Astuce : Pour une comparaison sensible à la casse, utilisez plutôt la fonction strnatcmp().

Utilisation courante : Cette fonction est particulièrement utile pour trier des tableaux contenant des chaînes alphanumériques avec la fonction usort().


Exemples Pratiques

Exemple 1 : Comparaison Simple

Exemple :  📋 Copier le code

<?php
// Comparaison avec ordre naturel
echo strnatcasecmp("2Hello world!", "10Hello world!");
echo "<br>";
echo strnatcasecmp("10Hello world!", "2Hello world!");
echo "<br>";

// Démonstration insensible à la casse
echo strnatcasecmp("Hello", "HELLO");  // Retourne 0
echo "<br>";
echo strnatcasecmp("hello", "Hello");  // Retourne 0
?>

Résultat du code ci-dessus :

-1
1
0
0

Explication : Dans l'ordre naturel, "2" est considéré comme inférieur à "10", même si en comparaison de chaînes standard, "2" serait supérieur à "1" (premier caractère de "10"). Les deux dernières lignes montrent que la casse est ignorée.

Exemple 2 : Tri de Fichiers avec usort()

Exemple :  📋 Copier le code

<?php
// Liste de fichiers désordonnés
$fichiers = array(
    "image10.jpg",
    "IMAGE2.jpg",
    "image1.jpg",
    "Image20.jpg",
    "image3.JPG"
);

// Tri avec ordre naturel insensible à la casse
usort($fichiers, "strnatcasecmp");

// Affichage des résultats
echo "<h4>Fichiers triés par ordre naturel :</h4>";
foreach ($fichiers as $fichier) {
    echo $fichier . "<br>";
}
?>

Résultat du code ci-dessus :

Fichiers triés par ordre naturel :
image1.jpg
IMAGE2.jpg
image3.JPG
image10.jpg
Image20.jpg

Avantage : Sans ordre naturel, "image10.jpg" apparaîtrait avant "image2.jpg" car "1" < "2" en comparaison caractère par caractère.

Exemple 3 : Comparaison de Versions

Exemple :  📋 Copier le code

<?php
// Comparaison de numéros de version
$version1 = "Version 2.1";
$version2 = "VERSION 10.5";

$resultat = strnatcasecmp($version1, $version2);

if ($resultat < 0) {
    echo "$version1 est inférieure à $version2";
} elseif ($resultat > 0) {
    echo "$version1 est supérieure à $version2";
} else {
    echo "Les versions sont identiques";
}
?>

Résultat :

Version 2.1 est inférieure à VERSION 10.5

Différence avec strcmp()

Voici un tableau comparatif pour mieux comprendre la différence :

Fonction Ordre Naturel Sensible Casse
strcmp() Non Oui
strcasecmp() Non Non
strnatcmp() Oui Oui
strnatcasecmp() Oui Non


Par carabde | Mis à jour le 28 octobre 2025