strcasecmp()
Articolo sulla funzione PHP strcasecmp(), usata per confrontare due stringhe senza distinzione tra maiuscole e minuscole: sintassi e utilizzo.
strcasecmp() è una funzione PHP integrata che confronta due stringhe senza distinzione tra maiuscole e minuscole — ciò significa che "Hello" e "hello" vengono considerati uguali. Esegue un confronto binario sicuro e restituisce un numero che indica non solo se le stringhe differiscono, ma quale è "maggiore" nell'ordine dei byte. Questa pagina illustra la sintassi, il significato del valore restituito, esempi pratici, errori comuni e le differenze rispetto alle funzioni correlate.
Sintassi
strcasecmp(string $string1, string $string2): intAccetta due parametri, entrambi obbligatori:
$string1— la prima stringa da confrontare.$string2— la seconda stringa da confrontare.
Valore restituito
Questo è l'aspetto che spesso viene frainteso. strcasecmp() non restituisce true/false. Restituisce un intero:
0se le due stringhe sono uguali (ignorando maiuscole/minuscole).- Un valore minore di 0 se
$string1è "minore di"$string2. - Un valore maggiore di 0 se
$string1è "maggiore di"$string2.
Il confronto si basa sui valori dei byte dei caratteri (convertiti in minuscolo), quindi il risultato fornisce anche un ordinamento alfabetico, rendendo la funzione utile come callback di ordinamento.
Esempio base
Qui $string1 e $string2 differiscono solo per la capitalizzazione, quindi strcasecmp() restituisce 0 e la condizione $result == 0 è vera.
L'output di questo codice è:
The two strings are equal.Interpretare il segno del risultato
Quando le stringhe non sono uguali, il segno indica il loro ordine. Si noti che la magnitudine esatta non è standardizzata tra le versioni di PHP — solo il segno (negativo, zero, positivo) è significativo, quindi confronta sempre con 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)
?>Output:
bool(true)
bool(true)
bool(true)Utilizzo pratico: verifica del login senza distinzione tra maiuscole e minuscole
Un caso d'uso reale comune è il confronto di input utente in cui la capitalizzazione non deve avere importanza, come un nome utente o una risposta sì/no.
<?php
$input = "ADMIN";
if (strcasecmp($input, "admin") === 0) {
echo "Welcome, admin!";
} else {
echo "Access denied.";
}
?>Output:
Welcome, admin!Utilizzo come comparatore di ordinamento
Poiché restituisce un intero di ordinamento, strcasecmp() è un callback naturale per usort() per ordinare le stringhe alfabeticamente ignorando la capitalizzazione.
<?php
$names = ["banana", "Apple", "cherry", "apple"];
usort($names, "strcasecmp");
print_r($names);
?>Output:
Array
(
[0] => Apple
[1] => apple
[2] => banana
[3] => cherry
)Errori comuni
- Restituisce un intero, non un boolean. Scrivere
if (strcasecmp($a, $b))è un errore: il blocco viene eseguito quando le stringhe sono diverse (valore non zero) e viene saltato quando sono uguali (0). Confronta sempre esplicitamente con=== 0. - È basato sui byte, non su Unicode.
strcasecmp()converte in minuscolo solo le lettere ASCIIA–Z. Caratteri accentati o multibyte (comeÉvsé) non vengono trattati come uguali. Per un confronto multibyte con supporto locale, normalizza prima entrambe le stringhe o usa l'estensioneintl. - Gli spazi e i caratteri finali sono rilevanti.
strcasecmp("yes", "yes ")è diverso da zero. Usatrim()per rimuovere gli spazi dall'input quando necessario.
Funzioni correlate
strcmp()— la controparte con distinzione tra maiuscole e minuscole; stessa semantica del valore restituito.strncasecmp()— confronto senza distinzione tra maiuscole e minuscole solo dei primi n caratteri.strtolower()— converte una stringa in minuscolo, utile prima di un confronto manuale.
Riepilogo
strcasecmp() confronta due stringhe senza distinzione tra maiuscole e minuscole e restituisce 0 quando corrispondono, un numero negativo quando la prima è minore e un numero positivo quando è maggiore. Ricorda di testare il risultato confrontandolo con 0 anziché trattarlo come un boolean, e usa strcmp() quando la capitalizzazione deve essere rilevante.