2018-06-08 14:10:26 1383瀏覽
本篇文章扣丁學(xué)堂PHP培訓(xùn)小編給大家分享一下PHP中in_array的隱式轉(zhuǎn)換的解決方法,文章中有代碼列出,對PHP開發(fā)感興趣的小伙伴可以隨著小編一起來看一下。
問題:
今天在寫一個接口的時候,需要傳入大量的基本信息參數(shù),參數(shù)分別是int和string兩種類型,為了校驗方便,把所有的參數(shù)都放在數(shù)組中,然后用in_array(0, $param)判斷 int 參數(shù)是否為0,再單獨判斷string參數(shù)是否為空,示例代碼如下:
if(in_array(0, $param) || $param['img'] == '') { $this->errorCode = 10030; $this->errorMessage = '參數(shù)不正確'; return false; }
可是自測時發(fā)現(xiàn),傳入正確的參數(shù),都會返回參數(shù)不正確的提示?。?!
原因:
出現(xiàn)這種情況,正是因為in_array惹的禍,in_array(search,array)等價于將數(shù)組中的每個value與search比較,由于我$param數(shù)組中除了有int參數(shù),還有一個string參數(shù),相當(dāng)于用string和int去比較,PHP的隱式轉(zhuǎn)換規(guī)則:
非數(shù)字字符串和整數(shù)比較,字符串自動轉(zhuǎn)換為int(0)
下面的例子就驗證了我們的說法:
<?php $a = (int)'abc'; var_dump($a); //int(0) $c = array(0,1,2,3); if(in_array('abc', $c)) { echo 'exist'; } else { echo 'not exist'; } //exist
解決辦法:
in_array增加第三個參數(shù)true,用來檢查搜索的數(shù)據(jù)與數(shù)組的值的類型是否相同,這樣函數(shù)只有在元素存在于數(shù)組中且數(shù)據(jù)類型與給定值相同時才返回 true
針對我上面出現(xiàn)的業(yè)務(wù),完全可以嚴(yán)謹(jǐn)一些,將int型數(shù)據(jù)存一個數(shù)組,string存一個數(shù)組,兩個不同類型的數(shù)組分別進行數(shù)據(jù)校驗,這樣也不會出現(xiàn)上面的問題
以上就是扣丁學(xué)堂PHP在線學(xué)習(xí)小編給大家分享的PHP中in_array的隱式轉(zhuǎn)換的解決方法,希望對小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢。扣丁學(xué)堂是專業(yè)的PHP培訓(xùn)機構(gòu),扣丁學(xué)堂不僅有專業(yè)的老師和與時俱進的課程體系,還有大量的PHP在線視頻供學(xué)員觀看學(xué)習(xí),想要學(xué)好PHP開發(fā)的小伙伴快快行動吧??鄱W(xué)堂PHP技術(shù)交流群:374332265。
【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“php培訓(xùn)資訊”的相關(guān)文章>>