在PHP 中進行數組數據過濾是非常常見的操作,特別是在處理用戶輸入、API 數據或數據庫結果時。 array_filter()是PHP 提供的一個強大函數,它能結合匿名函數(閉包)實現靈活、高效的數據過濾。本篇文章將帶你一步步了解如何使用它們來實現各種過濾邏輯。
array_filter()是一個內置的PHP 函數,用於通過回調函數(callback)對數組中的每一個元素進行判斷,返回符合條件的元素組成的新數組。
其基本語法如下:
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$array :要過濾的數組。
$callback :用於每個元素的回調函數,如果省略,則默認會去除值為false的元素。
$mode :可選參數,用於決定是否傳遞鍵名作為參數。
匿名函數,也叫閉包,是PHP 中一種沒有名稱的函數,非常適合在臨時邏輯處理時使用。其語法如下:
$filterFunc = function($value) {
return $value > 10;
};
這類函數通常會與array_filter()一起使用,實現更為精細的數據控制。
$numbers = [4, 15, 9, 23, 5];
$filtered = array_filter($numbers, function($value) {
return $value > 10;
});
print_r($filtered);
輸出:
Array
(
[1] => 15
[3] => 23
)
可以看到只有大於10 的數字被保留。
$formData = [
'name' => 'Alice',
'email' => '',
'age' => null,
'city' => 'Beijing'
];
$cleanData = array_filter($formData, function($value) {
return !empty($value);
});
print_r($cleanData);
輸出:
Array
(
[name] => Alice
[city] => Beijing
)
$data = [
'user_id' => 101,
'user_name' => 'Bob',
'admin_role' => true,
'timestamp' => 1681920000
];
$filtered = array_filter($data, function($value, $key) {
return str_contains($key, 'user');
}, ARRAY_FILTER_USE_BOTH);
print_r($filtered);
輸出:
Array
(
[user_id] => 101
[user_name] => Bob
)
假設你從某個數據源(如https://m66.net/api/posts )中獲得如下數組:
$posts = [
['title' => 'Hello World', 'url' => 'https://m66.net/post/1', 'published' => true],
['title' => 'Draft Post', 'url' => 'https://m66.net/post/2', 'published' => false],
['title' => 'PHP Tips', 'url' => 'https://m66.net/post/3', 'published' => true],
];
你可以使用array_filter()只保留已發布的文章:
$publishedPosts = array_filter($posts, function($post) {
return $post['published'] === true;
});
print_r($publishedPosts);
使用array_filter()結合匿名函數,可以輕鬆實現各種定制化的數據過濾需求。無論是過濾數值、字符串還是多維數組,只需要傳入合適的閉包函數即可靈活處理。
建議:
在處理用戶數據時,務必使用過濾器清除不需要的內容。
盡可能用匿名函數提升代碼可讀性與模塊化程度。
如需保留鍵名與原數組一致,可配合ARRAY_FILTER_USE_BOTH使用。