當前位置: 首頁> 最新文章列表> 用array_filter() 提升代碼的函數式風格

用array_filter() 提升代碼的函數式風格

M66 2025-06-03

在PHP 中,雖然它不是一門純粹的函數式編程語言,但通過內建的一些函數式工具,我們仍然可以編寫出更優雅、更簡潔、更易維護的代碼。 array_filter()就是這樣一個常被忽略但非常強大的工具函數。本文將介紹如何使用array_filter()來提升你的PHP 代碼風格,向函數式編程靠攏。

什麼是array_filter()

array_filter()是PHP 內置的數組處理函數之一,用於過濾數組中的元素。它接受一個回調函數,對數組的每個元素執行該函數,返回值為true的元素將被保留,其他的則被移除。

語法如下:

 array_filter(array $array, ?callable $callback = null, int $mode = 0): array

如果沒有提供回調函數,它將默認移除數組中等價於false的值(如0''nullfalse等)。

用法一:清理數據中的“空值”

很多時候我們會從表單或API 接收一些數據,可能包含空字符串、null、false 等無效內容。使用array_filter()可以一行代碼清理乾淨。

 $data = [
    'username' => 'alice',
    'email' => '',
    'age' => null,
    'subscribe' => false,
];

$cleaned = array_filter($data);

print_r($cleaned);

輸出:

 Array
(
    [username] => alice
)

這比手動寫foreach清理要優雅太多。

用法二:結合匿名函數進行條件過濾

你可以通過傳入回調函數,實現更靈活的條件過濾。例如,從一組用戶中篩選出活躍用戶:

 $users = [
    ['name' => 'Alice', 'active' => true],
    ['name' => 'Bob', 'active' => false],
    ['name' => 'Carol', 'active' => true],
];

$activeUsers = array_filter($users, function ($user) {
    return $user['active'];
});

print_r($activeUsers);

輸出結果將只包含Alice 和Carol。

用法三:處理API 響應或數據庫結果

假設你從某個遠程API(如https://api.m66.net/users )拿到了一組數據,其中包含了很多無效的或臨時用戶,你可以快速過濾掉它們:

 $response = file_get_contents('https://api.m66.net/users');
$users = json_decode($response, true);

$validUsers = array_filter($users, function ($user) {
    return isset($user['email']) && filter_var($user['email'], FILTER_VALIDATE_EMAIL);
});

你可以看到, array_filter()使得代碼更貼近“聲明式編程”的風格,代碼的意圖更清晰,而不是關注“如何實現循環和條件”。

用法四:配合其他函數式方法使用

你可以把array_filter()array_map()array_reduce()等函數式方法組合,寫出幾乎沒有foreach的邏輯代碼。例如,篩選並提取活躍用戶的用戶名:

 $usernames = array_map(
    fn($user) => $user['name'],
    array_filter($users, fn($user) => $user['active'])
);

簡潔優雅,語義清晰。

總結

array_filter()是一個輕量、強大、易用的函數,用得好可以讓你的PHP 更加函數式、更加可讀。相比傳統的foreach ,它可以將意圖清晰地表達在一行代碼中,減少樣板代碼,提高可維護性。

嘗試在你的下一個項目中使用array_filter()來提升代碼的質量和風格吧!