W3docs

strncmp()

La función strncmp() en PHP compara los primeros N caracteres de dos cadenas de forma binaria y sensible a mayúsculas.

Introducción

La función strncmp() en PHP realiza una comparación binaria segura y sensible a mayúsculas de los primeros N caracteres de dos cadenas. En lugar de comparar las cadenas en su totalidad, solo examina la porción inicial que se especifica, lo que la convierte en la herramienta adecuada cuando se necesita comparar un prefijo en lugar del valor completo (por ejemplo, verificar si una URL comienza con https o agrupar códigos que comparten un encabezado común).

Este artículo cubre la sintaxis de strncmp(), cómo interpretar su valor de retorno, varios ejemplos prácticos y los errores comunes que suelen cometerse.

Sintaxis

strncmp(string $string1, string $string2, int $length): int
ParámetroDescripción
$string1La primera cadena a comparar.
$string2La segunda cadena a comparar.
$lengthEl número máximo de caracteres a comparar desde el inicio de cada cadena.

strncmp() compara los primeros $length caracteres de $string1 y $string2 byte a byte y devuelve un entero:

Valor de retornoSignificado
< 0 (negativo)$string1 es "menor que" $string2 dentro del rango comparado.
0Los primeros $length caracteres son iguales.
> 0 (positivo)$string1 es "mayor que" $string2 dentro del rango comparado.

La comparación es lexicográfica, basada en el valor de byte de cada carácter. Dado que las letras ASCII en mayúsculas (AZ, códigos 65–90) van antes que las minúsculas (az, códigos 97–122), "Apple" se considera menor que "apple". El número no nulo exacto es la diferencia de valor de byte del primer carácter diferente, pero solo se debe confiar en su signo, no en su magnitud.

Ejemplo: comparar un prefijo

<?php

$string1 = "Hello World";
$string2 = "Hello";
$length = 5;

$result = strncmp($string1, $string2, $length);

if ($result < 0) {
  echo "The first $length characters of $string1 are less than the first $length characters of $string2";
} elseif ($result > 0) {
  echo "The first $length characters of $string1 are greater than the first $length characters of $string2";
} else {
  echo "The first $length characters of $string1 are equal to the first $length characters of $string2";
}

Aunque "Hello World" y "Hello" difieren en general, sus primeros 5 caracteres ("Hello") son idénticos, por lo que strncmp() devuelve 0 y la salida es:

The first 5 characters of Hello World are equal to the first 5 characters of Hello

Ejemplo: verificar si una cadena comienza con un prefijo

Un uso clásico de strncmp() es comprobar la presencia de un prefijo. Al pasar la longitud del prefijo como $length, solo se compara la parte del sujeto que cubre el prefijo:

<?php

$url = "https://www.w3docs.com";

if (strncmp($url, "https", 5) === 0) {
  echo "Secure URL";
} else {
  echo "Not secure";
}

Esto imprime Secure URL. En PHP 8.0+ la función dedicada str_starts_with() expresa la misma intención de forma más clara, pero strncmp() sigue siendo la opción portable para versiones anteriores.

Ejemplo: distinción entre mayúsculas y minúsculas

strncmp() distingue entre mayúsculas y minúsculas:

<?php

echo strncmp("PHP", "php", 3); // negative: 'P' (80) < 'p' (112)

Si necesitas ignorar las mayúsculas, usa strncasecmp() en su lugar, que realiza la misma comparación limitada por longitud sin distinguir entre mayúsculas y minúsculas.

Errores comunes

  • Solo el signo es significativo. Trata el resultado como "negativo / cero / positivo" y prefiere === 0 cuando quieres decir "los prefijos coinciden". No asumas que el valor es exactamente -1, 0 o 1; puede ser cualquier entero.
  • $length mayor que las cadenas no es un problema. Si $length supera la longitud de alguna de las cadenas, strncmp() simplemente compara hasta el final de la más corta. strncmp("Hi", "Hi", 50) devuelve 0.
  • Un $length negativo lanza un ValueError en PHP 8.0+ (y en versiones anteriores se trataba como 0).
  • Está basado en bytes, no en multibyte. Para texto UTF-8, $length cuenta bytes, no caracteres, por lo que un carácter multibyte puede dividirse. Los datos ASCII simples no se ven afectados.

Funciones relacionadas

  • strcmp() — compara dos cadenas completas, con distinción de mayúsculas.
  • strncasecmp() — como strncmp(), pero sin distinción de mayúsculas.
  • strcasecmp() — comparación sin distinción de mayúsculas de cadenas completas.
  • substr_compare() — compara cadenas a partir de un desplazamiento elegido.
  • strpos() — encuentra la posición de una subcadena.

Conclusión

strncmp() compara solo los primeros N caracteres de dos cadenas, con distinción de mayúsculas y de forma binaria segura, devolviendo un número negativo, 0 o un número positivo. Úsala cuando necesites hacer coincidir un prefijo o comparar una porción inicial de longitud fija de dos cadenas, y recuerda verificar el signo del resultado con === 0, < 0 o > 0 en lugar de un valor exacto.

Práctica

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