問題
今天在寫一個接口的時(shí)候,需要傳入大量的基本信息參數(shù),參數(shù)分別是int和string兩種類型,為了校驗(yàn)方便,我打算把所有的參數(shù)都放在數(shù)組中,然后用in_array(0, $param)判斷 int 參數(shù)是否為0,再單獨(dú)判斷string參數(shù)是否為空,示例代碼如下:
if(in_array(0, $param) || $param['img'] == '') {
$this->errorCode = 10030;
$this->errorMessage = '參數(shù)不正確';
return false;
}
可是自測時(shí)發(fā)現(xiàn),傳入正確的參數(shù),都會返回參數(shù)不正確的提示?。。?/p>
原因
出現(xiàn)這種情況,正是因?yàn)閕n_array惹的禍,in_array(search,array)等價(jià)于將數(shù)組中的每個value與search比較,由于我$param數(shù)組中除了有int參數(shù),還有一個string參數(shù),相當(dāng)于用string和int去比較,PHP的隱式轉(zhuǎn)換規(guī)則:
非數(shù)字字符串和整數(shù)比較,字符串自動轉(zhuǎn)換為int(0)
下面的例子就驗(yàn)證了我們的說法:
?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ù)類型與給定值相同時(shí)才返回 true
針對我上面出現(xiàn)的業(yè)務(wù),完全可以嚴(yán)謹(jǐn)一些,將int型數(shù)據(jù)存一個數(shù)組,string存一個數(shù)組,兩個不同類型的數(shù)組分別進(jìn)行數(shù)據(jù)校驗(yàn),這樣也不會出現(xiàn)上面的問題
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- php使用array_chunk函數(shù)將一個數(shù)組分割成多個數(shù)組
- PHP array_reduce()函數(shù)的應(yīng)用解析
- PHP 二維array轉(zhuǎn)換json的實(shí)例講解
- 分享六個比較好用的php數(shù)組Array函數(shù)
- php curl獲取到j(luò)son對象并轉(zhuǎn)成數(shù)組array的方法
- PHP數(shù)組式訪問接口ArrayAccess用法分析
- PHP如何使用array_unshift()在數(shù)組開頭插入元素