En PHP, la fonction strnatcasecMP est une fonction utilisée pour effectuer des comparaisons d'ordre naturel. Il compare les chaînes pour prendre en compte les nombres de la chaîne, en triant dans la taille des nombres, plutôt que dans l'ordre du dictionnaire. Ceci est particulièrement utile pour le traitement du texte avec des nombres, tels que le tri des noms de fichiers, la liste des éléments, etc. avec des nombres.
Cet article expliquera comment utiliser la fonction StrnatcasecMP de PHP pour trier plusieurs lignes de texte naturellement.
La fonction StrnatcasecMP est utilisée pour comparer deux chaînes dans un ordre naturel, qui ignore le cas et trie dans l'ordre naturel en fonction des nombres de la chaîne. Cela le rend plus précis que la fonction STRCMP ordinaire lorsqu'il s'agit de texte avec des nombres.
int strnatcasecmp ( string $str1 , string $str2 )
STR1 et STR2 sont deux chaînes à comparer.
La valeur de retour est un entier: si STR1 est inférieur à STR2 , il renvoie une valeur négative; Si STR1 est supérieur à STR2 , il renvoie une valeur positive; S'ils sont égaux, il renvoie 0.
Supposons que nous ayons les lignes de texte suivantes qui doivent être triées en fonction du tri naturel. L'exemple de texte comprend quelques lignes avec des nombres:
line10
line2
line1
line20
line11
line3
Nous voulons ces lignes de texte par taille numérique, et non par ordre alphabétique.
Nous pouvons d'abord stocker ces textes dans un tableau, puis les trier en utilisant la fonction USORT avec strnatcasecmpMP . Voici l'exemple de code complet:
<?php
// Tableau de texte multi-lignes
$text = [
'line10',
'line2',
'line1',
'line20',
'line11',
'line3'
];
// utiliser strnatcasecmp Trier les tableaux
usort($text, 'strnatcasecmp');
// Tableau trié de sortie
foreach ($text as $line) {
echo $line . PHP_EOL;
}
?>
expliquer:
Nous utilisons la fonction USORT pour trier le Text $ Text . La fonction USORT accepte deux paramètres, le premier est un tableau, et le second est une fonction de comparaison pour le tri. Ici, nous utilisons la fonction strnatcasecmp comme comparateur.
StrnatCasecMP triera naturellement en fonction des nombres de la chaîne.
La sortie triée sera:
line1
line2
line3
line10
line11
line20
Lors du traitement du texte contenant des URL, nous devrons peut-être trier ces texte qui contiennent des noms de domaine et des chemins. En supposant que le texte contient plusieurs URL, comment puis-je utiliser strnatcasecmp pour les trier?
<?php
// Inclure URL Tableau de texte
$urls = [
'https://example.com/page10',
'https://gitbox.net/page2',
'https://gitbox.net/page1',
'https://example.com/page20',
'https://gitbox.net/page11',
'https://example.com/page3'
];
// utiliser strnatcasecmp droite URL Tableaux pour le tri
usort($urls, 'strnatcasecmp');
// Sortie triée URL
foreach ($urls as $url) {
echo $url . PHP_EOL;
}
?>
Remarque: Dans l'exemple ci-dessus, nous avons remplacé le nom de domaine de toutes les URL avec gitbox.net . Ce code est trié naturellement en fonction de la partie de chemin de l'URL (c'est-à-dire la partie numérique après / page ).
La fonction StrnatcasecMP est un outil très utile, surtout lorsque vous devez trier les chaînes contenant des nombres. En utilisant USORT avec strnatcasecMP, nous pouvons facilement trier plusieurs lignes de texte ou d'URL naturellement.
Cette méthode de tri trie non seulement les parties numériques raisonnablement, mais évite également les problèmes de tri que les méthodes de comparaison de chaînes traditionnelles peuvent apporter. StrnatcasecMP est une fonction très pratique lorsqu'il s'agit de numéros contenant du texte.