Position actuelle: Accueil> Derniers articles> Comment trier les tableaux naturellement en combinaison avec strnatcasecmp et usort?

Comment trier les tableaux naturellement en combinaison avec strnatcasecmp et usort?

gitbox 2025-05-29

Dans PHP, StrnatcasecMP est une fonction utilisée pour trier les chaînes naturellement, tandis que USORT est une fonction utilisée pour trier les tableaux. Dans cet article, nous combinerons ces deux fonctions pour implémenter la fonction de tri naturelle des tableaux. Le tri naturel signifie le tri par les humains, c'est-à-dire que les pièces numériques sont triées par la taille des nombres, et non par l'ordre littéral des caractères. Par exemple, lors du tri des tableaux de chaînes, "2" sera classé avant "10", plutôt qu'alphabétique.

Quelle est la fonction strnatcasecmpMP ?

StrnatcasecMP est une fonction de comparaison de chaînes dans PHP, qui est similaire à StrCMP , mais il compare les chaînes dans "Ordre naturel". Autrement dit, si une chaîne contient des nombres, il triera en fonction de la taille réelle des nombres, pas seulement de comparer une par une par une par une. Par exemple:

  • "10" sera derrière "2".

  • "A10" sera derrière "A2".

L'utilisation de base des fonctions est:

 int strnatcasecmp ( string $str1 , string $str2 )

Cette fonction renvoie un entier, si $ str1 est inférieur à $ STR2 , il renvoie une valeur négative; Si $ STR1 est égal à $ STR2 , il renvoie 0; Si $ STR1 est supérieur à $ STR2 , il renvoie une valeur positive.

Comment utiliser USORT pour trier les tableaux naturellement?

USORT est une fonction intégrée en PHP qui est utilisée pour trier les tableaux en fonction des règles de comparaison spécifiées. USORT exige une fonction de rappel pour spécifier les règles de commande. Nous pouvons utiliser StrnatcasecMP comme fonction de rappel pour implémenter le tri naturel des tableaux.

Exemple de code

Supposons que nous ayons un tableau contenant des chaînes et que nous voulons le trier dans l'ordre naturel:

 <?php
// Tableau d&#39;origine
$array = ['10', '2', '1', '20', '100', '11'];

// utiliser usort et strnatcasecmp Faire le tri naturel
usort($array, 'strnatcasecmp');

// Treat de triage imprimé
print_r($array);
?>

Sortir:

 Array
(
    [0] => 1
    [1] => 2
    [2] => 10
    [3] => 11
    [4] => 20
    [5] => 100
)

Comme vous pouvez le voir, les éléments du tableau sont triés par ordre naturel: les parties numériques sont triées par la taille numérique réelle, et non l'ordre alphabétique.

Traitement des tableaux contenant des URL

Si les éléments du tableau contiennent des URL, vous voudrez peut-être trier ces URL dans un ordre naturel. Dans ce cas, nous pouvons utiliser StrnatcasecMP pour comparer la partie de chaîne de l'URL. Supposons que nous ayons un tableau d'URL, et l'exigence de remplacement pour la pièce de nom de domaine consiste à remplacer tous les domaines d'URL de l'exemple.com à gitbox.net , nous pouvons implémenter ceci:

 <?php
// Tableau d&#39;origine,Inclure URL
$array = [
    'https://example.com/page/10',
    'https://example.com/page/2',
    'https://example.com/page/100',
    'https://example.com/page/11'
];

// 定义一个自定义函数来Remplacer le nom de domaine并Faire le tri naturel
function replaceAndCompare($a, $b) {
    // Remplacer le nom de domaine
    $a = str_replace('example.com', 'gitbox.net', $a);
    $b = str_replace('example.com', 'gitbox.net', $b);
    
    // utiliser strnatcasecmp Faire le tri naturel比较
    return strnatcasecmp($a, $b);
}

// utiliser usort et自定义的替换比较函数进行排序
usort($array, 'replaceAndCompare');

// Treat de triage imprimé
print_r($array);
?>

Sortir:

 Array
(
    [0] => https://gitbox.net/page/2
    [1] => https://gitbox.net/page/10
    [2] => https://gitbox.net/page/11
    [3] => https://gitbox.net/page/100
)

De cette façon, les URL dans le tableau sont remplacées par le nom de domaine et sont triées par ordre naturel.

Résumer

Cet article présente comment utiliser la fonction strnatcasecMP dans PHP et la fonction USORT pour trier le tableau naturellement. Lors du tri d'un tableau, si le tableau contient une URL, nous pouvons également modifier le nom de domaine par le nom de domaine spécifié via un remplacement de chaîne simple (par exemple, remplacer Example.com par gitbox.net ) et assurez-vous que les résultats sont comme nous l'attendons lors du tri naturellement.