PHP中in_array的隱式轉換實例詳解

小云云
發布: 2023-03-20 22:48:02
原創
1305 人瀏覽過

今天在寫一個介面的時候,需要傳入大量的基本資訊參數,參數分別是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)&#39;abc&#39;;
  var_dump($a); //int(0)

  $c = array(0,1,2,3);
  if(in_array(&#39;abc&#39;, $c)) {
    echo &#39;exist&#39;;
  } else {
    echo &#39;not exist&#39;;
  } //exist
登入後複製

解決辦法

in_array增加第三個參數true,用來檢查搜尋的資料與陣列的值的型別是否相同,這樣函數只有在元素存在於陣列中且資料型別與給定值相同時才傳回true

針對我上面出現的業務,完全可以嚴謹一些,將int型資料存一個數組,string存一個數組,兩個不同類型的數組分別進行資料校驗,這樣也不會出現上面的問題


相關推薦:


關於JavaScript中的一些隱含轉換和總結實例

#隱式轉換如何使用?總結隱式轉換實例用法

javascript隱式轉換詳解#

以上是PHP中in_array的隱式轉換實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!