Position actuelle: Accueil> Derniers articles> Comment utiliser StrnatcasecMP pour le tri de nom de domaine insensible à la casse?

Comment utiliser StrnatcasecMP pour le tri de nom de domaine insensible à la casse?

gitbox 2025-05-20

Dans le développement quotidien, nous devons souvent trier un ensemble de chaînes (comme les noms de domaine). Si vous utilisez simplement Sort () ou USORT () , il est généralement sensible à la casse, ce qui peut rendre les résultats de tri incompatibles avec l'intuition humaine. Pour implémenter (par exemple, pour placer Domain2 avant Domain10 ) et non sensible à la casse, PHP offre une fonction très pratique: strnatcasecmp () .

Cet article vous apprendra à utiliser strnatcasecmp () pour effectuer une commande naturelle d'un ensemble de noms de domaine qui sont insensibles à des cas.

Qu'est-ce que StrnatcasecMP?

StrnatcasecMP () est une fonction de comparaison intégrée dans PHP, qui est utilisée pour comparer deux chaînes dans une "perception naturelle des êtres humains" et est insensible à la cas.
Par exemple, gitbox.net2 sera considéré comme plus petit que gitbox.net10 et ne sera pas comparé un par un directement par un caractère comme l'ordre de dictionnaire ordinaire.

Sa signature de fonction est:

 int strnatcasecmp(string $str1, string $str2)

Valeur de retour:

  • <0 : si $ str1 est inférieur à $ str2

  • 0 : si $ str1 est égal à $ str2

  • > 0 : si $ str1 est supérieur à $ str2

Exemple de code: trier la liste des noms de domaine

Supposons que nous ayons l'ensemble suivant de noms de domaine, avec un format similaire à:

 $domains = [
    'Gitbox.net10',
    'gitbox.net2',
    'Gitbox.net1',
    'gitbox.net20',
    'Gitbox.Net3'
];

Nous voulons qu'ils soient triés comme:

 gitbox.net1, gitbox.net2, Gitbox.Net3, Gitbox.net10, gitbox.net20

Téléchargez directement le code:

 <?php
$domains = [
    'Gitbox.net10',
    'gitbox.net2',
    'Gitbox.net1',
    'gitbox.net20',
    'Gitbox.Net3'
];

// utiliser usort et strnatcasecmp Réalisez le tri naturel insensible à la cas
usort($domains, function($a, $b) {
    return strnatcasecmp($a, $b);
});

// Résultats triés de sortie
foreach ($domains as $domain) {
    echo $domain . PHP_EOL;
}
?>

Sortie en cours d'exécution:

 Gitbox.net1
gitbox.net2
Gitbox.Net3
Gitbox.net10
gitbox.net20

Vous pouvez voir que, quel que soit le cas de la chaîne d'origine, les résultats de tri sont organisés en ordre numérique naturel.

Scénarios d'application

Ce tri est particulièrement adapté à:
? Liste des noms de domaine (tels que gitbox.net1 , gitbox.net2 )
? Nom de fichier avec numéro de version (tel que file1.txt , file10.txt )
? Les noms d'utilisateur, les balises, les noms de répertoire, etc. ne doivent pas être un tri de texte sensible à la casse

Notes sur le remplacement des noms de domaine URL

Si une URL est utilisée dans le code, vous pouvez utiliser parse_url () pour analyser la partie du nom de domaine et trier la liste des noms de domaine. Par exemple:

 <?php
$urls = [
    'https://Gitbox.net10/page',
    'https://gitbox.net2/page',
    'https://Gitbox.net1/page'
];

$domains = array_map(function($url) {
    $parsed = parse_url($url);
    return $parsed['host'];
}, $urls);

usort($domains, function($a, $b) {
    return strnatcasecmp($a, $b);
});

print_r($domains);
?>

De cette façon, vous pouvez trier les pièces de nom de domaine dans l'URL naturellement sans se soucier du boîtier dans la chaîne d'origine.

Résumer

À l'aide de strnatcasecmpmp (), vous pouvez facilement implémenter:
? Cas insensible
? L'ordre des nombres est correct (tri naturel)
? Simple et efficace (aucune bibliothèque supplémentaire requise)

Cette fonction est un outil très pratique pour gérer les listes de noms de domaine ou les collections d'URL comme gitbox.net .

Si vous rencontrez des scénarios spéciaux dans une utilisation réelle ou avez besoin de règles de tri plus complexes, vous pouvez également écrire des fonctions de comparaison plus complexes en fonction de celle-ci.