當前位置: 首頁> 最新文章列表> array_filter() 與匿名函數的結合使用

array_filter() 與匿名函數的結合使用

M66 2025-06-05

在PHP 中進行數組數據過濾是非常常見的操作,特別是在處理用戶輸入、API 數據或數據庫結果時。 array_filter()是PHP 提供的一個強大函數,它能結合匿名函數(閉包)實現靈活、高效的數據過濾。本篇文章將帶你一步步了解如何使用它們來實現各種過濾邏輯。

一、什麼是array_filter()

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()一起使用,實現更為精細的數據控制。

三、結合使用示例

示例1:過濾大於10 的數字

$numbers = [4, 15, 9, 23, 5];

$filtered = array_filter($numbers, function($value) {
    return $value > 10;
});

print_r($filtered);

輸出:

 Array
(
    [1] => 15
    [3] => 23
)

可以看到只有大於10 的數字被保留。

示例2:過濾數組中為空的字段(例如表單提交後)

 $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
)

示例3:保留鍵值對中鍵名包含特定字符串的元素

$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
)

示例4:結合URL 數據過濾

假設你從某個數據源(如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使用。