W3docs

strnatcasecmp()

La función strnatcasecmp() en PHP compara dos cadenas sin distinguir mayúsculas usando un algoritmo de "orden natural". Similar a strcasecmp()

Introducción

strnatcasecmp() compara dos cadenas usando un algoritmo de "orden natural", ignorando las mayúsculas y minúsculas. El "orden natural" significa que los números incluidos en las cadenas se comparan por su valor numérico en lugar de carácter por carácter — así "file2" se ordena antes que "file10", que es como una persona los ordenaría. La comparación alfabética simple usada por strcasecmp() pondría "file10" primero, porque '1' viene antes que '2'.

Esta página cubre la firma de la función, su valor de retorno, cómo difiere de las funciones de comparación relacionadas y cómo usarla como callback de ordenación.

Sintaxis

strnatcasecmp(string $string1, string $string2): int
ParámetroDescripción
$string1La primera cadena a comparar.
$string2La segunda cadena a comparar.

La función es segura para binarios (funciona con cadenas que contienen bytes nulos) e insensible a mayúsculas ("FILE" y "file" se tratan como iguales).

Valor de retorno

strnatcasecmp() devuelve un int cuyo signo indica el resultado — la magnitud exacta depende de la implementación, por lo que siempre se debe comparar con 0, no con un número específico:

RetornoSignificado
< 0 (negativo)$string1 es menor que $string2
> 0 (positivo)$string1 es mayor que $string2
0Las dos cadenas son iguales

Ejemplo básico

php— editable, runs on the server

Dado que los números se comparan por valor (1 < 10), la salida es:

file1.txt is less than file10.txt

Comparación natural vs. regular

Esta es la razón principal por la que existe strnatcasecmp(). Con una comparación regular, las cadenas se comparan carácter por carácter, por lo que '1' (el primer dígito de 10) supera a '2'. El orden natural examina el número completo:

<?php

$a = "img12";
$b = "IMG2";

// Regular, case-insensitive: '1' < '2', so img12 comes first
echo strcasecmp($a, $b) . "\n";      // negative

// Natural, case-insensitive: 12 > 2, so img12 comes second
echo strnatcasecmp($a, $b) . "\n";   // positive

Las dos funciones discrepan en el orden y strnatcasecmp() ignora las diferencias de mayúsculas entre IMG e img, devolviendo el resultado más intuitivo para el usuario.

Ordenar un array de forma natural

El uso más común en el mundo real es como callback de comparación para usort(), para ordenar nombres de archivos o cadenas con formato de versión:

<?php

$files = ["file10.txt", "File2.txt", "file1.txt"];

usort($files, "strnatcasecmp");

print_r($files);

Salida:

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

Si tiene un array que desea ordenar en su lugar por valor, natcasesort() aplica el mismo orden natural insensible a mayúsculas preservando las claves.

Funciones relacionadas

Función¿Orden natural?¿Sensible a mayúsculas?
strnatcasecmp()No
strnatcmp()
strcasecmp()NoNo
strcmp()No

Use strnatcasecmp() cuando necesite tanto el ordenamiento natural como la insensibilidad a mayúsculas; elija strnatcmp() si las mayúsculas importan.

Conclusión

strnatcasecmp() compara dos cadenas en el orden que un ser humano esperaría — tratando los números incorporados como números e ignorando las mayúsculas y minúsculas. Siempre evalúe el signo de su valor de retorno, y úselo (frecuentemente junto con usort()) siempre que ordene nombres de archivos, etiquetas o cualquier cadena que mezcle texto y números.

Práctica

Práctica
¿Cuál es la función de strnatcasecmp() en PHP?
¿Cuál es la función de strnatcasecmp() en PHP?
Was this page helpful?