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): intEla 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:
0se 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
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 ASCIIA–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ãointl. - Espaços em branco e caracteres finais importam.
strcasecmp("yes", "yes ")é diferente de zero. Limpe a entrada comtrim()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.