論strpos 的正確使用方式

2021-07-11 19:35:17 字數 1302 閱讀 7190

首先簡單介紹下strpos函式;

strpos函式是查詢某個字元在字串中的位置;這裡需要明確這個函式的作用;

這個函式得到的是位置;如果存在;返回數字;否則返回的是false;

而很多時候我們拿這個函式用來判斷字串中是否存在某個字元;

一些同學使用的姿勢是這樣的;

// 判斷『白俊遙部落格』中是否存在『部落格』這個詞

if (strpos('白俊遙部落格', '部落格')) else

這段**輸出的是'存在';沒什麼問題;但是再看下面這段**;

// 判斷『白俊遙部落格』中是否存在『白』這個字

if (strpos('白俊遙部落格', '白')) else

輸出了'不存在';原因是因為 '白' 在 '白俊遙部落格' 中的第0個位置;而0在if中表示了false;

所以;如果用strpos來判斷字串中是否存在某個字元時必須使用===false 、必須使用===false必須使用===false

重要的事情說三遍;正確的使用方式如下;

// 判斷『白俊遙部落格』中是否存在『部落格』這個詞

if (strpos('白俊遙部落格', '部落格')===false) else

你以為用上了===你就得到了strpos的整個世界?no;no;no;

這傢伙還有個隱藏坑;我來換個詞;

// 判斷『白俊遙部落格1』中是否存在『1』這個數字

if (strpos('白俊遙部落格1', 1)===false) else

如果你腦算出來的上面這段**輸出的是『存在』;

那你這完全沒跟上我的套路啊;不是技能的問題了;

是時候為智商討個說法了;

事實上輸出的是'不存在';細心的童鞋會發現這個1 是不帶引號的;

strpos的第二個引數必須是字串型的;

因此;如果你是在迴圈或者其他情況下呼叫的strpos函式;而且不確定第二個引數的型別;

那麼保險的方式是用strval把它轉字串型別了:

// 判斷『白俊遙部落格1』中是否存在『1』這個數字

$haystack='白俊遙部落格1';

$needle=1;

if (strpos($haystack, strval($needle))===false) else

論啃書的正確方式

一下午的時光總是過得很快,有時候 一不小心 就浪費很多時間。不管你有沒有過這樣的情況,反正我是有。以下是我列出來的放縱的三個過程 1 感到有點枯燥,來點東西爽爽 2 就一點點,沒有關係的 3 啊 做這個果然是比啃書順暢多了,我剛才計畫是什麼?管它呢!就是1 2 3這樣走著,當你覺得太過分的時候就會從...

論stringstream正確使用之道

昨天擼 的時候發現了乙個問題就是型別的轉換,當時我的是從string轉化為int型,然後試了 int 這種強制型別轉化!doesn t work 我擦!居然不行?好吧,正常情況是,就是不行 腫麼辦?找到了乙個神器!stringstream,這個類是最近才加到編譯器裡面去的。所以想用這個的童鞋先公升級...

使用正確的FTP傳輸方式

使用ftp上傳檔案時,一定注意所選用的傳輸方式,比如使用了ascii上傳檔案後之後,再把檔案拉回本地,覆蓋原始檔 會發現檔案有了改動,用svn提交時,會有這樣的提示 text是相同的,但換行 newlines 變了 為什麼會這樣?ftp有ascii和binary兩種傳輸模式。binary模式不會對資...