一直以來(lái)都用

程序代碼
if(strpos($str, 'ok')) { ... }
來(lái)判斷字符串$str內(nèi)是否含有'ok'在內(nèi),但最近發(fā)現(xiàn)用這個(gè)方式判斷一個(gè)帶'ok'的字符串卻沒(méi)有查找成功,郁悶的是,這個(gè)字符串就是以'ok'開(kāi)頭,怎么可能查找不到呢?
找到strpos函數(shù)的定義介紹,srtpos返回查找字符串第一個(gè)出現(xiàn)的位子,這個(gè)位置是從0開(kāi)始算的,比如在'It's ok!'中,'ok'的位置是5。如果找不到,則返回false。發(fā)現(xiàn)問(wèn)題了:PHP的變量類型都是弱類型的可以隨便轉(zhuǎn)換變量類型,0可以看作是整數(shù)類型,也可以看作是布爾類型的false,加入strpos判斷到字符串查找位置出現(xiàn)在0這個(gè)位置,函數(shù)返回0,if語(yǔ)句是把它當(dāng)0看還是當(dāng)false看?看來(lái)這正是問(wèn)題所在。
找到問(wèn)題,解決方法也就有了,給被查找字符串前面補(bǔ)一位
不包含在關(guān)鍵字內(nèi)的字符就可以了,這樣只要匹配到,返回結(jié)果總會(huì)>=1。

程序代碼
if(strpos('v' . $str, 'ok')) { ... }
要是需要拿到查找到的位置,則在if判斷完畢后,-1后使用即可。
補(bǔ)充:
經(jīng)漫游神同學(xué)指點(diǎn),可以用===,!==方式來(lái)實(shí)現(xiàn)準(zhǔn)確判斷,不需要用hank了,謝謝!

程序代碼
if(strpos($str, 'ok') !== false) { ... }