Confronto tra stringhe in PHP

17 giugno 2016

Nella lezione relativa agli operatori di confronto abbiamo imparato che attraverso l’operatore == è possibile verificare se due stringhe sono uguali tra loro.

$stringa = "stringa";
if ($stringa == "stringa") {
    echo "Le stringhe sono uguali.";
} else {
    echo "Le stringhe non coincidono.";
}

Il controllo precedente stamperà a schermo il messaggio “Le stringhe sono uguali” dato che stiamo comparando due stringhe del tutto identiche. Cosa accade però se le stringhe sono uguali ma differiscono anche solo per un carattere che è maiuscolo e/o minuscolo? Vediamo un esempio:

$stringa = "Stringa";
if ($stringa == "stringa") {
    echo "Le stringhe sono uguali";
} else {
    echo "Le stringhe non coincidono";
}

In questo caso la prima stringa ha il primo carattere maiuscolo, non è del tutto identica alla seconda. L’esito del confronto in questo caso sarà negativo e verrà stampato il messaggio “Le stringhe non coincidono“. I confronti tra stringhe in PHP sono quindi case sensitive (letteralmente “sensibili alle maiuscole “).

Con PHP è possibile effettuare dei controlli anche per determinare quale delle due stringhe è maggiore o minore. Il confronto viene fatto in base all’ordine alfabetico dei caratteri seguendo l’ordine:

  • caratteri maiuscoli;
  • caratteri minuscoli:
  • cifre.

Motivo per il quale si avrà:

$a = 'MAIUSCOLO';
$b = 'minuscolo';
$c = '10 cifra';

$a > $b;  // vero perché la stringa inizia per un carattere maiuscolo
$b > $c;  // vero perché un carattere minuscolo ha priorità su una cifra
$c > $a;  // false perché un carattere maiuscolo ha priorità

'B' > 'A'; // vero perché la A viene prima della B
'm' > 'N'; // falso perché una lettera maiuscola ha priorità rispetto ad una minuscola

strcmp e strcasecmp

Gli operatori di confronto non sono l’unico modo per confrontare due stringhe. Il PHP ci fornisce anche con due funzioni specifiche.

La funzione strcmp() consente di effettuare gli stessi controlli visti finora, prende in ingresso due parametri che rappresentano le due stringhe e restituiscono un valore intero. Il valore di ritorno è dato da:

  • <0 se la prima stringa è minore della seconda;
  • =0 se le stringhe coincidono;
  • 0 se la prima stringa è maggiore della seconda;

I primi due costrutti di controllo, quindi, possono essere riscritti in questo modo:

$stringa = "stringa";
if (strcmp($stringa, "stringa") == 0) {
    echo "Le stringhe sono uguali";
} else {
    echo "Le stringhe non coincidono";
}
$stringa = "Stringa";
if (strcmp($stringa, "stringa") == 0) {
    echo "Le stringhe sono uguali";
} else {
    echo "Le stringhe non coincidono";
}

Il risultato, ovviamente, sarà lo stesso degli esempi precedenti.

Nel caso in cui abbiamo bisogno di effettuare confronti non sensibili alle maiuscole possiamo utilizzare la funzione strcasecmp() che ha un comportamento del tutto identico a strcmp senza però essere case-sensitive.

$stringa = "Stringa";
if (strcasecmp($stringa, "stringa") == 0) {
    echo "Le stringhe sono uguali";
} else {
    echo "Le stringhe non coincidono";
}

Utilizzando strcasecmp() l’esempio precedente ci restituirà il messaggio “Le stringhe sono uguali” in quanto la funzione è case-insensitive.

Tutte le lezioni

1 ... 23 24 25 ... 49

Se vuoi aggiornamenti su Confronto tra stringhe in PHP inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Confronto tra stringhe in PHP

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy