W3docs

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): int

Accetta 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:

  • 0 se 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

php— editable, runs on the server

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 ASCII A–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'estensione intl.
  • Gli spazi e i caratteri finali sono rilevanti. strcasecmp("yes", "yes ") è diverso da zero. Usa trim() 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.

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.

Pratica

Pratica
Cosa fa la funzione strcasecmp() in PHP?
Cosa fa la funzione strcasecmp() in PHP?
Was this page helpful?