首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 判斷整數的兩大方法與型別陷阱深度解析

     編輯:PHP 相關知識

方法一:數學運算法(floor/ceil 對比)

<?php
$a = 3.3;
if (floor($a) == $a) {
    echo "$a 是整數";
} else {
    echo "$a 不是整數"; // 輸出此行
}
?>

原理:整數取整後與原值相等。同理可用 ceil()、round()、intval()。但**僅適用於數值型別**,字串 "3.0" 會被隱性轉換為 float 3.0 而判定為整數。

方法二:內建函數 is_int()(型別檢查)

<?php
$a = 3.3;
if (is_int($a)) {
    echo "$a 是整數";
} else {
    echo "$a 不是整數"; // 輸出此行
}
?>

核心差異:is_int() 檢查**變數型別**而非數值內容。is_int(3) → true;is_int(3.0) → false(float);is_int("3") → false(string)。

關鍵陷阱:字串數值的判斷

表單輸入、API 參數皆為字串,直接用 is_int() 會誤判。解決方案:

方案一:正則表達式

function str_is_int_regex($str) {
    return preg_match('/^-?\d+$/', $str) === 1;
}

方案二:型別轉換對比(推薦)

function str_is_int_cast($str) {
    return 0 === strcmp($str, (string)(int)$str);
}
// 或更簡潔(PHP 7+)
function str_is_int_simple($str) {
    return filter_var($str, FILTER_VALIDATE_INT) !== false;
}

方案三:ctype_digit(僅非負整數)

ctype_digit("123");   // true
ctype_digit("-123");  // false
ctype_digit("12.3");  // false

效能與適用場景對比

方法適用型別負數支援效能建議場景
is_int()僅 integer是極快內部變數型別檢查
floor() ==數值型是快數學運算後驗證
filter_var()字串/數值是中外部輸入驗證(表單、API)
正則字串可控較慢複雜格式驗證
ctype_digit字串否極快非負整數純字串檢查

最佳實踐建議

  1. **內部邏輯**:變數經過數學運算後,用 is_int() 或 === 嚴格比較。
  2. **外部輸入**:統一用 filter_var($input, FILTER_VALIDATE_INT),可同時過濾、轉換、驗證。
  3. **資料庫交互**:PDO 繫結參數指定 PDO::PARAM_INT,讓驅動層處理型別。
  4. **避免隱性轉換**:關閉 magic_quotes_gpc、開啟 strict_types=1,在邊界處顯式驗證與轉型。

結語

判斷整數看似簡單,實則涉及型別系統、隱性轉換、外部輸入邊界等核心概念。選對工具、守住邊界,才能寫出健壯的 PHP 程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved