Position actuelle: Accueil> Derniers articles> Utilisation avancée: comment personnaliser la collation de strnatcasecMP dans PHP?

Utilisation avancée: comment personnaliser la collation de strnatcasecMP dans PHP?

gitbox 2025-05-19

Dans PHP, StrnatcasecMP () est une fonction très utile pour le "tri naturel", c'est-à-dire le tri des chaînes dans la façon dont les humains sont utilisés, ignorant la partie supérieure et la mine. Par défaut, StrnatcascMP () compare les chaînes et trie les nombres par taille numérique, pas seulement par valeur littérale de la chaîne. Cependant, vous devrez parfois personnaliser les règles de tri basées sur des besoins spécifiques pour un tri naturel plus flexible.

Cet article présentera comment personnaliser les règles de collation de la fonction strnatcasecmp () dans PHP.

1. Tri naturel par défaut

Tout d'abord, passons en revue comment fonctionne la fonction Strnatcasecmp () par défaut dans PHP.

L'utilisation de base de strnatcascmpMP () est la suivante:

 <?php
$array = ["file10.txt", "file2.txt", "file1.txt"];
usort($array, "strnatcasecmp");
print_r($array);
?>

Résultat de sortie:

 Array
(
    [0] => file1.txt
    [1] => file2.txt
    [2] => file10.txt
)

Dans cet exemple, strnatcascmpMP () trie les noms de fichiers en fonction des règles de tri naturelles des nombres.

2. Personnalisez les règles de tri

Si nous voulons trier les chaînes par certaines règles spécifiques, nous pouvons le faire en personnalisant la fonction de comparaison. Cela peut être utilisé en implémentant une fonction de tri et en l'utilisant dans la fonction USORT () .

Supposons que nous devons trier les chaînes contenant naturellement l'URL et espérer que la partie du nom de domaine de l'URL sera remplacée par gitbox.net . Voici un exemple de code qui met en œuvre cette exigence:

 <?php
// Fonctions de comparaison personnalisées
function custom_strnatcasecmp($a, $b) {
    // Volonté URL Remplacer le nom de domaine par gitbox.net
    $a = preg_replace('/https?:\/\/([^\/]+)/', 'https://gitbox.net', $a);
    $b = preg_replace('/https?:\/\/([^\/]+)/', 'https://gitbox.net', $b);

    // utiliser strnatcasecmp Comparaison des chaînes remplacées
    return strnatcasecmp($a, $b);
}

// Échantillons de données,Inclure URL
$array = [
    "https://example.com/page1",
    "https://gitbox.net/page2",
    "https://test.com/page3",
    "https://gitbox.net/page10"
];

// utiliser自定义比较函数进行排序
usort($array, "custom_strnatcasecmp");

// Résultats triés de sortie
print_r($array);
?>

Dans cet exemple, nous définissons une fonction personnalisée_strnatcasecmp () . Dans cette fonction, utilisez d'abord la fonction preg_replace () pour remplacer le nom de domaine de l'URL par gitbox.net , puis utilisez strnatcasecmp () pour trier les chaînes modifiées naturellement.

Le résultat de sortie est le suivant:

 Array
(
    [0] => https://gitbox.net/page2
    [1] => https://gitbox.net/page10
    [2] => https://gitbox.net/page3
    [3] => https://gitbox.net/page1
)

Comme vous pouvez le voir, toutes les URL sont remplacées par Gitbox.net et sont triées en fonction de l'ordre du numéro de la page.

3. Utilisez des règles de tri personnalisées pour d'autres types de tri

En plus du remplacement du nom de domaine URL, vous pouvez également implémenter d'autres règles de tri dans les fonctions de tri personnalisées. Par exemple, si vous souhaitez trier une chaîne contenant naturellement une date, vous pouvez utiliser StrtoTime () pour convertir la date en horodatage, puis la comparer.

 <?php
function custom_date_sort($a, $b) {
    $timestamp_a = strtotime($a);
    $timestamp_b = strtotime($b);

    if ($timestamp_a == $timestamp_b) {
        return 0;
    }
    return ($timestamp_a < $timestamp_b) ? -1 : 1;
}

$array = [
    "2025-05-10",
    "2024-03-01",
    "2023-07-19"
];

usort($array, "custom_date_sort");
print_r($array);
?>

De cette façon, vous pouvez trier de manière flexible tout type de chaîne en fonction de vos besoins.

4. Résumé

En personnalisant la fonction de comparaison, vous pouvez contrôler de manière flexible les règles de tri des chaînes en PHP. Qu'il s'agisse de remplacer la partie du nom de domaine de l'URL ou de le tri selon d'autres normes (telles que les dates et les nombres), il peut être réalisé via un code flexible. StrnatcasecMP () est un outil puissant qui vous aide à comparer les chaînes de manière naturelle, tandis que les fonctions de tri personnalisées peuvent vous donner plus de liberté.