Gli operatori di confronto < <= > >=
possono essere applicati anche per le stringhe. Quindi, perché abbiamo bisogno di una funzione speciale per il confronto delle stringhe: strcmp
?PHP: Perché abbiamo bisogno della funzione di confronto delle stringhe?
risposta
Poiché esistono diverse varianti:
A seconda della funzione, la risposta a queste domande variano:
- È case sensitive? (vs
strcasecmp
,strnatcmp
vsstrnatcasecmp
) - Dipende dal locale? (
strcoll
fa) - Posso specificare una collazione? (
strcoll
è affetto dasetlocale
)
Additionaly, gli operatori di confronto anche dare true
o false
. strcmp
restituisce un numero intero in modo che possa codificare simultaneamente se c'è identità (return 0) o, in caso contrario, qual è più grande (a seconda che il valore sia positivo o negativo).
C'è una differenza per '===' però? –
Se entrambi gli operandi sono stringhe e nel caso specifico di 'strcmp', non penso ci sia una differenza, no. – Artefacto
@Peka Sì, entrambi fanno affidamento su memcmp. C'è solo la differenza che uno restituisce vero/falso, l'altro qualsiasi intero. – Artefacto
Sebbene non vi siano sovraccarichi in PHP per strcmp, strcmp risultati in 3 differenti valori -1 per meno, 0 per pari e +1 per maggiore della stringa rispetto. Con < = <= > >=
avrai (qualche volta) per fare più assegni uno dopo l'altro.
Non restituisce solo -1, 1 e 0. – Artefacto
E a meno che non si implementi una sorta di tabella di ricerca, si otterranno anche due confronti nel caso peggiore. – Artefacto
Erm, 'strcmp' è usato più o meno allo stesso modo, tranne che si prende l'operatore di confronto e lo si applica a' 0'. Quindi '$ a <$ b' diventa' strcmp ($ a, $ b) <0' - lo stesso vale per '==', '<=', '>' e '> ='. – Joey
Avrei immaginato che si possa fornire un proprio comparatore o locale a quella funzione ... ma no, è solo la semplice vecchia funzione di libreria C, anche se in modalità binaria. Quindi forse per facilitare il porting del codice C in PHP ... dal momento che sembra che accada tutto il tempo. – Joey