strnatcmp / strnatcasecmp în PHP

Compară două texte în „ordine naturală”, în care img2 vine înaintea lui img10.

Sintaxă
strnatcmp(string $string1, string $string2): int

Ce face strnatcmp / strnatcasecmp

Comparația obișnuită (strcmp) pune img10 înaintea lui img2, pentru că se uită caracter cu caracter, iar „1” este mai mic decât „2”. strnatcmp recunoaște numerele din text și le compară ca numere, așa cum ar face un om.

strnatcasecmp face același lucru, dar nu ține cont de litere mari și mici. Ambele returnează un număr negativ, 0 sau pozitiv, ca strcmp.

Parametri

Parametru Descriere
$string1 Primul text.
$string2 Al doilea text.

Ce returnează

Un număr negativ, 0 sau un număr pozitiv.

Exemple

Exemplul 1: Comparație obișnuită și naturală

<?php
echo (strcmp("img2", "img10") <=> 0) . "\n";
echo (strnatcmp("img2", "img10") <=> 0);

Rezultat

1
-1

Exemplul 2: Sortarea numelor de fișiere

<?php
$fisiere = ["Poza10.jpg", "poza2.jpg", "poza1.jpg", "Poza21.jpg"];

usort($fisiere, "strnatcasecmp");
echo implode(", ", $fisiere);

Rezultat

poza1.jpg, poza2.jpg, Poza10.jpg, Poza21.jpg

Greșeli frecvente

  • Sortezi liste de versiuni (1.10, 1.9) cu sort și obții ordinea greșită. Folosește usort($lista, "strnatcmp") sau version_compare pentru versiuni.

Comenzi înrudite

  • strcmp / strcasecmp / strncmp: Compară două texte și spune dacă primul este mai mic, egal sau mai mare decât al doilea.
  • sort: Sortează elementele unui tablou crescător. Există și variante pentru descrescător și pentru chei.