這次帶給大家in_array的隱式轉換如何使用,使用in_array隱式轉換的注意事項有哪些,下面就是實戰案例,一起來看一下。
問題
今天在寫一個介面的時候,需要傳入大量的基本資訊參數,參數分別是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存一個數組,兩個不同類型的數組分別進行資料校驗,這樣也不會出現上面的問題相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章! 推薦閱讀:以上是in_array的隱式轉換如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!