2010-07-15 111 views
9

比較運算符< <= > >=也可以應用於字符串。那麼爲什麼我們需要特殊的字符串比較函數:strcmpPHP:爲什麼我們需要字符串比較功能?

+2

我想你可能會提供一個自己的比較器或語言環境到該函數......但不,它只是簡單的舊C庫函數,儘管是二進制安全的。所以也許可以輕鬆地將C代碼移植到PHP中......因爲這顯然是一直在發生的。 – Joey 2010-07-15 11:38:38

回答

13

因爲有幾個變化:

根據不同的功能,這些問題的答案各不相同:

Additionaly,比較運算符也給truefalsestrcmp給出一個整數,所以它可以同時編碼是否存在標識(返回0),或者如果不是,哪個更大(取決於值是正還是負)。

+0

雖然'==='有區別嗎? – 2010-07-15 11:40:07

+0

如果兩個操作數都是字符串,並且在'strcmp'的特定情況下,我認爲沒有區別,不。 – Artefacto 2010-07-15 11:43:12

+0

@Peka是的,他們都依靠memcmp。只有一個返回true/false,其他任何整數。 – Artefacto 2010-07-15 12:12:43

3

雖然有PHP中沒有重載的strcmp,的strcmp結果在3倍不同的值 -1小於,0爲equals和1比所比較的字符串越大。隨着< = <= > >=你會(有時)一個接一個地做多次檢查

+1

它不會僅返回-1,1和0. – Artefacto 2010-07-15 11:48:52

+0

除非您實施某種查找表,否則最終還會出現最差的兩種比較。 – Artefacto 2010-07-15 11:58:44

+0

Erm,'strcmp'的使用方式幾乎相同,不同之處在於您使用比較運算符並將其應用於'0'。因此'$ a <$ b'成爲'strcmp($ a,$ b)<0' - 對於== ==,'<=', '>'和'> ='也是如此。 – Joey 2010-07-15 12:14:50