當前位置: 首頁> 最新文章列表> 使用array_filter() 實現條件篩選表單輸入

使用array_filter() 實現條件篩選表單輸入

M66 2025-05-14

在Web 開發過程中,我們常常需要對錶單提交的數據進行篩選,以便只保留滿足某些特定條件的輸入項。 PHP 提供了一個非常有用的函數array_filter() ,它不僅可以用於去除數組中的空值,還能自定義回調函數,實現更複雜的篩選邏輯。

本文將介紹如何利用array_filter()對錶單提交的數據進行條件篩選,幫助你寫出更簡潔、可維護的PHP 代碼。

什麼是array_filter()?

array_filter()是PHP 提供的一個數組處理函數。它的語法如下:

 array_filter(array $array, ?callable $callback = null, int $mode = 0): array
  • $array : 需要篩選的數組。

  • $callback : (可選)一個回調函數,用來定義篩選條件。

  • $mode : (可選)可以使用ARRAY_FILTER_USE_KEYARRAY_FILTER_USE_BOTH來指定回調函數參數。

如果不傳遞回調函數, array_filter()會自動移除數組中值為false的元素(例如false0""null[]等)。

示例:對錶單輸入進行篩選

假設我們有一個用戶註冊表單,它提交以下字段:

  • 姓名

  • 郵箱

  • 年齡

  • 是否訂閱郵件

我們想要篩選出填寫了值的字段,並且只保留年齡大於18 的用戶數據。

表單提交示例

$_POST = [
    'name' => 'Alice',
    'email' => '',
    'age' => 17,
    'subscribe' => 'yes'
];

使用array_filter() 實現篩選邏輯

// 自定義篩選條件
$filteredInput = array_filter($_POST, function ($value, $key) {
    // 跳過空值
    if ($value === '' || $value === null) {
        return false;
    }

    // 針對 age 字段做特定處理
    if ($key === 'age') {
        return (int)$value > 18;
    }

    return true;
}, ARRAY_FILTER_USE_BOTH);

print_r($filteredInput);

輸出結果

Array
(
    [name] => Alice
    [subscribe] => yes
)

如你所見, email是空字符串被剔除, age小於或等於18 也被過濾掉了,剩下的是我們關心的有效字段。

應用場景拓展

你也可以使用這個方法對來自URL 請求的GET 參數進行清洗,比如:

 $_GET = [
    'search' => 'PHP',
    'page' => '0',
    'sort' => null,
    'token' => 'abc123'
];

$cleanQuery = array_filter($_GET, function ($value) {
    return $value !== '' && $value !== null;
});

$queryString = http_build_query($cleanQuery);

$url = "https://m66.net/search.php?" . $queryString;

echo $url;

輸出

https://m66.net/search.php?search=PHP&page=0&token=abc123

注意, page值為'0'並未被過濾,因為我們顯式排除了對0的判斷,保留了有意義的參數。

小結

使用array_filter()可以大大簡化我們在處理表單輸入時的代碼邏輯,尤其適合做一些輕量級的數據驗證或預處理。配合回調函數使用時,它能夠滿足大多數條件篩選的需求,是PHP 中一個非常實用的函數。

需要注意的是, array_filter()並不是數據驗證的萬能工具,對於更複雜的驗證需求,仍建議結合PHP 的過濾器擴展(如filter_var() )或使用完整的驗證框架進行處理。

希望你能在下次處理表單數據時,善用array_filter()提高開發效率!