2010-07-15 16 views
9

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?

+2

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

risposta

13

Poiché esistono diverse varianti:

A seconda della funzione, la risposta a queste domande variano:

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).

+0

C'è una differenza per '===' però? –

+0

Se entrambi gli operandi sono stringhe e nel caso specifico di 'strcmp', non penso ci sia una differenza, no. – Artefacto

+0

@Peka Sì, entrambi fanno affidamento su memcmp. C'è solo la differenza che uno restituisce vero/falso, l'altro qualsiasi intero. – Artefacto

3

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.

+1

Non restituisce solo -1, 1 e 0. – Artefacto

+0

E a meno che non si implementi una sorta di tabella di ricerca, si otterranno anche due confronti nel caso peggiore. – Artefacto

+0

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

Problemi correlati