PHP中in_array的隱式轉(zhuǎn)換的解決方法
問題
今天在寫一個接口的時候,需要傳入大量的基本信息參數(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ù),相當于用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è)務,完全可以嚴謹一些,將int型數(shù)據(jù)存一個數(shù)組,string存一個數(shù)組,兩個不同類型的數(shù)組分別進行數(shù)據(jù)校驗,這樣也不會出現(xiàn)上面的問題
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
WordPress后臺中實現(xiàn)圖片上傳功能的實例講解
這篇文章主要介紹了WordPress后臺中實現(xiàn)圖片上傳功能的實例講解,包括多個圖片上傳表單功能的實現(xiàn),需要的朋友可以參考下2016-01-01
PHP+Ajax實現(xiàn)上傳文件進度條動態(tài)顯示進度功能
這篇文章主要介紹了PHP+Ajax實現(xiàn)上傳文件進度條動態(tài)顯示進度功能,通過ajax實現(xiàn)主界面,php處理上傳文件,具體實例代碼大家跟隨腳本之家小編一起看看吧2018-06-06
php微信公眾號開發(fā)(2)百度BAE搭建和數(shù)據(jù)庫使用
這篇文章主要介紹了php微信公眾號開發(fā)第二課,百度BAE搭建和數(shù)據(jù)庫使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
Yii模型操作之criteria查找數(shù)據(jù)庫的方法
這篇文章主要介紹了Yii模型操作之criteria查找數(shù)據(jù)庫的方法,結合實例形式分析了Yii模型中criteria的實例化與查詢操作相關技巧,需要的朋友可以參考下2016-07-07
php+ajax實現(xiàn)無刷新動態(tài)加載數(shù)據(jù)技術
無刷新功能我們用到很多很多的,下面我就來給各位介紹一個實例,就是實現(xiàn)php+ajax實現(xiàn)無刷新滾屏加載數(shù)據(jù),例子非常的簡單大家只要按流程來操作就可以了哦。2015-04-04
確保Laravel網(wǎng)站不會被嵌入到其他站點中的方法
這篇文章主要介紹了確保Laravel網(wǎng)站不會被嵌入到其他站點中的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
關于PhpStorm設置點擊編輯文件自動定位源文件的實現(xiàn)方式
這篇文章主要介紹了關于PhpStorm設置點擊編輯文件自動定位源文件的實現(xiàn)方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12

