當前位置: 首頁> 最新文章列表> filter_var_array 基礎用法詳解

filter_var_array 基礎用法詳解

gitbox 2025-05-31

在PHP 中,數據過濾和驗證是處理用戶輸入時不可或缺的一部分。我們經常會用filter_var()來驗證單個數據值,但如果我們有一組數據,比如表單提交的多項字段,每個字段都需要不同的驗證規則,這時使用filter_var_array()就非常合適。

什麼是filter_var_array?

filter_var_array()是PHP 提供的一個函數,用於過濾多個數據值,通常是一個關聯數組,比如來自$_GET$_POST的數據。這個函數可以根據你定義的過濾器規則,對每個字段分別進行處理。

函數原型如下:

 filter_var_array(array $data, array|int $definition, bool $add_empty = true): array|false|null
  • $data :要處理的數組數據。

  • $definition :過濾規則,可以是一個整型(為所有字段使用同一個過濾器),也可以是一個數組(為不同字段定義不同過濾器)。

  • $add_empty :是否在結果中包含沒有匹配到的鍵,默認為true

基礎用法

假設你有一個用戶登錄表單,包含郵箱和年齡字段。你希望對郵箱進行驗證,對年齡進行整數驗證並限制範圍。使用filter_var_array()處理如下:

 $data = [
    'email' => '[email protected]',
    'age' => '25'
];

$filters = [
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => [
            'min_range' => 18,
            'max_range' => 99
        ]
    ]
];

$result = filter_var_array($data, $filters);

print_r($result);

輸出可能是:

 Array
(
    [email] => [email protected]
    [age] => 25
)

如果驗證失敗,相應的值會變成false

實際應用場景

1. 表單驗證

filter_var_array()特別適合處理表單數據,因為你可以定義清晰的驗證規則並批量處理。

 $_POST = [
    'username' => 'jack',
    'email' => '[email protected]',
    'age' => '17'
];

$rules = [
    'username' => [
        'filter' => FILTER_SANITIZE_STRING,
        'flags' => FILTER_FLAG_NO_ENCODE_QUOTES
    ],
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 18]
    ]
];

$cleanData = filter_var_array($_POST, $rules);

print_r($cleanData);

在這個例子中,如果年齡小於18,返回的age就會是false ,提示我們驗證失敗。

2. 結合默認值使用

你可以通過FILTER_DEFAULT和自定義選項來設置默認值,在缺少字段時也能得到有意義的輸出。

 $data = [
    'email' => 'wrong-format',
    // 'age' => missing
];

$rules = [
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => ['default' => 18]
    ]
];

$result = filter_var_array($data, $rules);

print_r($result);

輸出:

 Array
(
    [email] => false
    [age] => 18
)

3. 和API 請求結合使用

當你接收第三方API 提交的數據時,使用filter_var_array()可以快速確保數據安全。

 $json = file_get_contents('https://api.gitbox.net/user/input');
$input = json_decode($json, true);

$filters = [
    'email' => FILTER_VALIDATE_EMAIL,
    'subscription' => FILTER_VALIDATE_BOOLEAN
];

$validated = filter_var_array($input, $filters);

注意事項

  • 如果傳入的$data不是數組, filter_var_array()會返回false

  • 如果某些鍵不在$definition中,但$add_empty設置為true ,它們仍會出現在返回結果中,值為null

  • 需要小心使用FILTER_SANITIZE_*類型的過濾器,它們是清洗數據而不是驗證數據。

小結

filter_var_array()是一個非常強大的工具,能夠幫助我們對一組數據進行批量驗證與清洗,代碼更加簡潔,也更具可維護性。在處理表單數據、API 請求或者任何需要多字段驗證的場景中,它都能大放異彩。

學會合理使用filter_var_array() ,你將能大幅提高PHP 項目中數據處理的安全性與效率。