php某些自帶函數,若是使用不當,也會坑得你人仰馬翻。好比:strpos()php
先了解一下strpos()函數是幹啥的。函數
strpos — 查找字符串首次出現的位置spa
用法: int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )blog
看下面代碼:ip
$a = 'abcd';內存
$b = 'b';字符串
$c = 'a';string
echo strpos($a,$b) ? '原來是兄弟<br/>' : '非我族類,砍ta<br/>';擴展
echo strpos($a,$c) ? '原來是兄弟<br/>' : '非我族類,砍ta<br/>';im
echo strpos($a,$c)!=false ? '原來是兄弟' : '非我族類,砍ta';
結果顯示
原來是兄弟
非我族類,砍ta
非我族類,砍ta
$c 命名是$a的一部分,結果當成異類,連着被砍了兩次,冤枉,引起了一場本是同根生,相煎何太急的血案悲劇!
stripos()返回的是字符串在另外一個字符串出現的位置,而這個位置是從0開始計算的。$c在$a中出現的位置是0,所以被砍。
因此,正確的判斷應該是:
$a = 'abcd';
$c = 'a';
echo strpos($a,$c)!==false ? '原來是兄弟' : '非我族類,砍ta';
防坑攻略裏說了一些緣由,這裏先充分了解strpos()函數提及。
用法:int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
參數:
haystack 在該字符串中進行查找。
needle 若是 needle 不是一個字符串,那麼它將被轉換爲整型並被視爲字符的順序值。
offset 可選的 offset 參數能夠用來指定從 haystack 中的哪個字符開始查找。返回的數字位置是相對於 haystack 的起始位置而言的。
返回值
以整型返回位置信息。若是沒找到 needle,strpos() 將返回布爾型的 FALSE 值。
也就是說,此函數可能返回布爾值 FALSE,但也可能返回等同於 FALSE 的非布爾值,例如 0 或 ""(空串)。所以,在判斷的時候,須要使用恆等於’===‘或者恆不等於’===‘來判斷,千萬不能省去一個’=‘號。
一、相似的函數還有
strrpos() - 計算指定字符串在目標字符串中最後一次出現的位置
stripos() - 查找字符串首次出現的位置(不區分大小寫)
strripos() - 計算指定字符串在目標字符串中最後一次出現的位置(不區分大小寫)
二、判斷一個字符串是否在另外一個字符串中還有一個函數:strstr()。與strpos()有一點不一樣是,該函數的返回值是false或者字符串的一部分。若是單純的判斷兩個字符串的包含關係,最好使用strpos,由於速度更快、耗費內存更少。