在Web 開發過程中,我們常常需要對錶單提交的數據進行篩選,以便只保留滿足某些特定條件的輸入項。 PHP 提供了一個非常有用的函數array_filter() ,它不僅可以用於去除數組中的空值,還能自定義回調函數,實現更複雜的篩選邏輯。
本文將介紹如何利用array_filter()對錶單提交的數據進行條件篩選,幫助你寫出更簡潔、可維護的PHP 代碼。
array_filter()是PHP 提供的一個數組處理函數。它的語法如下:
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$array : 需要篩選的數組。
$callback : (可選)一個回調函數,用來定義篩選條件。
$mode : (可選)可以使用ARRAY_FILTER_USE_KEY或ARRAY_FILTER_USE_BOTH來指定回調函數參數。
如果不傳遞回調函數, array_filter()會自動移除數組中值為false的元素(例如false 、 0 、 "" 、 null 、 []等)。
假設我們有一個用戶註冊表單,它提交以下字段:
姓名
郵箱
年齡
是否訂閱郵件
我們想要篩選出填寫了值的字段,並且只保留年齡大於18 的用戶數據。
$_POST = [
'name' => 'Alice',
'email' => '',
'age' => 17,
'subscribe' => 'yes'
];
// 自定義篩選條件
$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()提高開發效率!