問題
今天在寫一個接口的時候,需要傳入大量的基本信息參數,參數分別是int和string兩種類型,為了校驗方便,我打算把所有的參數都放在數組中,然后用in_array(0, $param)判斷 int 參數是否為0,再單獨判斷string參數是否為空,示例代碼如下:
if(in_array(0, $param) || $param['img'] == '') { $this->errorCode = 10030; $this->errorMessage = '參數不正確'; return false; }
可是自測時發現,傳入正確的參數,都會返回參數不正確的提示!!!
原因
出現這種情況,正是因為in_array惹的禍,in_array(search,array)等價于將數組中的每個value與search比較,由于我$param數組中除了有int參數,還有一個string參數,相當于用string和int去比較,PHP的隱式轉換規則:
非數字字符串和整數比較,字符串自動轉換為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增加第三個參數true,用來檢查搜索的數據與數組的值的類型是否相同,這樣函數只有在元素存在于數組中且數據類型與給定值相同時才返回 true
針對我上面出現的業務,完全可以嚴謹一些,將int型數據存一個數組,string存一個數組,兩個不同類型的數組分別進行數據校驗,這樣也不會出現上面的問題
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。