W3docs

strcasecmp()

Aprenda sobre a função PHP strcasecmp(), usada para comparar duas strings sem considerar maiúsculas e minúsculas, com sintaxe e exemplos práticos.

strcasecmp() é uma função PHP embutida que compara duas strings sem diferenciar maiúsculas de minúsculas — ou seja, "Hello" e "hello" são tratadas como iguais. Ela realiza uma comparação binária segura e retorna um número que indica não apenas se as strings diferem, mas qual delas é "maior" em ordem de bytes. Esta página aborda a sintaxe, o que o valor de retorno realmente significa, exemplos práticos, armadilhas comuns e como ela difere de funções relacionadas.

Sintaxe

strcasecmp(string $string1, string $string2): int

Ela recebe dois parâmetros, ambos obrigatórios:

  • $string1 — a primeira string a comparar.
  • $string2 — a segunda string a comparar.

Valor de retorno

Esta é a parte que a maioria das pessoas entende errado. strcasecmp() não retorna true/false. Ela retorna um inteiro:

  • 0 se as duas strings são iguais (ignorando maiúsculas/minúsculas).
  • Um valor menor que 0 se $string1 é "menor que" $string2.
  • Um valor maior que 0 se $string1 é "maior que" $string2.

A comparação é baseada nos valores de bytes dos caracteres (em minúsculas), portanto o resultado também fornece ordenação alfabética, tornando a função útil para callbacks de ordenação.

Exemplo básico

php— editable, runs on the server

Aqui $string1 e $string2 diferem apenas no caso, então strcasecmp() retorna 0 e a condição $result == 0 é verdadeira.

A saída deste código é:

The two strings are equal.

Interpretando o sinal do resultado

Quando as strings não são iguais, o sinal indica a ordem delas. Observe que a magnitude exata não é padronizada entre versões do PHP — apenas o sinal (negativo, zero, positivo) é significativo, portanto sempre compare com 0.

<?php
// "apple" comes before "Banana" alphabetically (case ignored)
var_dump(strcasecmp("apple", "Banana") < 0);   // bool(true)
var_dump(strcasecmp("Banana", "apple") > 0);   // bool(true)
var_dump(strcasecmp("PHP", "php") === 0);       // bool(true)
?>

Saída:

bool(true)
bool(true)
bool(true)

Uso prático: verificação de login sem distinção de maiúsculas

Um uso real comum é comparar entrada do usuário onde o caso não deve importar, como um nome de usuário ou uma resposta sim/não.

<?php
$input = "ADMIN";
if (strcasecmp($input, "admin") === 0) {
    echo "Welcome, admin!";
} else {
    echo "Access denied.";
}
?>

Saída:

Welcome, admin!

Usando como comparador de ordenação

Por retornar um inteiro de ordenação, strcasecmp() é um callback natural para usort() para ordenar strings alfabeticamente ignorando o caso.

<?php
$names = ["banana", "Apple", "cherry", "apple"];
usort($names, "strcasecmp");
print_r($names);
?>

Saída:

Array
(
    [0] => Apple
    [1] => apple
    [2] => banana
    [3] => cherry
)

Armadilhas comuns

  • Ela retorna um inteiro, não um boolean. Escrever if (strcasecmp($a, $b)) é um bug: o bloco é executado quando as strings são diferentes (diferente de zero) e é ignorado quando são iguais (0). Sempre compare explicitamente com === 0.
  • É baseada em bytes, não compatível com Unicode. strcasecmp() apenas converte para minúsculas as letras ASCII A–Z. Caracteres acentuados ou multibyte (como É vs é) não são tratados como iguais. Para comparação multibyte sensível ao locale, normalize ambas as strings primeiro ou use a extensão intl.
  • Espaços em branco e caracteres finais importam. strcasecmp("yes", "yes ") é diferente de zero. Limpe a entrada com trim() quando necessário.

Funções relacionadas

  • strcmp() — o equivalente sensível a maiúsculas; mesma semântica de retorno.
  • strncasecmp() — comparação sem distinção de maiúsculas apenas dos primeiros n caracteres.
  • strtolower() — converte uma string para minúsculas, útil antes de uma comparação manual.

Resumo

strcasecmp() compara duas strings sem diferenciar maiúsculas de minúsculas e retorna 0 quando coincidem, um número negativo quando a primeira é menor e um número positivo quando é maior. Lembre-se de testar o resultado contra 0 em vez de tratá-lo como boolean, e use strcmp() quando o caso deve importar.

Prática

Prática
O que a função strcasecmp() em PHP faz?
O que a função strcasecmp() em PHP faz?
Was this page helpful?