php字串比較

2022-08-01 20:24:13 字數 1963 閱讀 8193

比較兩個字串是否相等,最常見的方法就是使用「===」來判斷,至於它和「==」的區別,簡單來說 就是前者強調「identical」型別也要求一樣;後者要求「equal」,值相同就可以了。或者使用strcmp來判斷,但是這個能夠告 訴你兩個字串是否相等,但是無法告訴你在那裡不同。

一般能用 !=, == 比較兩個物件是否相等,只所以說是兩個物件,是因為他們不一定全部為字串,也能為整型等等。

如果用 !==,===(能看到多了乙個等號)比較的話,兩個物件的型別要嚴格相等才能返回true;否則用==,!=則會將字串自動轉換成相應的型別,以便進行比較.

22 == "22"; // 返回 true

22 === "22"; // 返回false   

正因為這樣,所以我們的程式時常會發生一些想不到的「意外」:

0 == "我愛你"; // 返回true

1 == "1 我愛你";// 返回true

php教程裡更有這樣一組用於字串比較的函式:strcmp,strcasecmp,strncasecmp(), strncmp(),他們都是如果前者比後者大,則返回大於0的整數;如果前者比後者小,則返回小於0的整數;如果兩者相等,則返回0.他們比較的原理和其他語言的規則都是相同的。

strcmp是用於區分大小寫(即大小寫敏感)的字串比較:

echo strcmp("abcdd", "abcde"); // 返回 1 (>0), 比較的是 "b"和"b"

strcasecmp用於不區分大小寫的字串比較:

echo strcasecmp("abcdd", "abcde"); // 返回 -1 (<0), 比較的是"d"和"e"

strncmp用於比較字串的一部分,從字串的開頭開始比較,第三個引數,為要比較的長度:

echo strncmp("abcdd", "abcde", 3); // 返回 1 (>0), 比較了 abc 和 abc

strncasecmp用於不區分大小寫的比較字串的一部分,從字串的開頭開始比較,第三個引數,為要比較的長度:

echo strncasecmp("abcdd", "abcde", 3); // 返回 0, 比較了 abc 和 abc, 由於不區分大小寫,所以兩者相同。

更有一種情況是單單比較字串大小,達不到我們預定的需求,比如照常理 10.gif 會比 5.gif 大,但如果應用上面幾個函式,就會返回 -1,即表示 10.gif比5.gif,針對這種情況,php提供了兩個自然對比的函式strnatcmp,strnatcasecmp:

echo strnatcmp("10.gif", "5.gif"); // 返回 1 (>0)

echo strnatcasecmp("10.gif", "5.gif"); // 返回 1 (>0)

在php中,使用==是不可靠的。即便是變數的型別相同,==為真也並不代表真的就相等。所以

在php中盡量使用 === 來進行比較

,使用 == 前一定要三思

。 在php中 === 的操作是zend_is_identical,php不會嘗試改變值的型別,非常嚴謹,比較的速度也要快一些。例如:

$aa = '88.';//多個點

$b = '88';

if($aa == $b) 

echo "相等";

得到的結果是相等。

因為88是乙個數字,php會自動轉換成整型或者浮點型進行==比較,當然會相等; strcmp是強制轉換成string型別比較,===是要求數值一樣並且型別一樣 88是int型別,88.是浮點型別,當然不一樣

。用恒等 === 則 不會得到相等的結論.用strcmp()也不會得到相等的結論.所以最好不要使用 == 作為字串相等比較.改用strcmp();

對於倆個字串, 會首先判斷他們是否是numeric_string, 如果是,那麼就會轉換成整形來比較.. 那麼什麼是numeric string呢? 因為php不區分型別, 所以它採用乙個策略, 當你的變數看起來是乙個數字的時候, 那麼她就認為這個變數是乙個數字,然後轉換為整形來比較。

php字串如何比較,PHP字串比較

我們在 中用的最多的邏輯是什麼?你知道如下的幾段 的布林結果分別是什麼麼?var dump 1 1e0 var dump 1 0x1 var dump 20 2e1 var dump 10 0x0a 等等 對,也許你會說在php手冊的附錄中有一部分關於這個問題的總結.問題是,這只是知其然,那麼所以然...

PHP字串比較

我們在 中用的最多的邏輯是什麼?你知道如下的幾段 的布林結果分別是什麼麼?var dump 1 1e0 var dump 1 0x1 var dump 20 2e1 var dump 10 0x0a 等等 對,也許你會說在php手冊的附錄中有一部分關於這個問題的總結.問題是,這只是知其然,那麼所以然...

PHP字串比較

作者 laruence 我們在 中用的最多的邏輯是什麼 你知道如下的幾段 的布林結果分別是什麼麼?1.var dump 1 1e0 2.var dump 1 0x1 3.var dump 20 2e1 4.var dump 10 0x0a 等等 對 也許你會說在 php手冊的附錄中有一部分關於這個問...