在PHP開發中,數組是非常常用的數據結構。而在操作數組時,我們經常需要對數組進行過濾,比如去除空值、保留滿足某些條件的元素等等。 array_filter()函數就是專門為此而設計的一個非常實用的工具。
本文將詳細講解array_filter()的基本用法、參數含義以及一些常見的使用場景,幫助你快速掌握這個函數的實際應用。
array_filter()是PHP內置函數之一,它的作用是使用回調函數對數組中的每個元素進行過濾,僅保留返回值為true的元素。它的語法如下:
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$array :要過濾的原始數組。
$callback (可選):用於判斷是否保留某個元素的回調函數。如果為null ,則默認移除值為false 、 null 、空字符串'' 、數字0、空數組[]等“假值”。
$mode (PHP 7.4+):指定傳遞給回調函數的內容,是值、鍵,還是鍵值對。
這是最常見的使用方式,適用於清理表單數據或配置項等:
$data = ["apple", "", null, 0, "banana", false];
$filtered = array_filter($data);
print_r($filtered);
輸出結果:
Array
(
[0] => apple
[4] => banana
)
沒有傳入回調函數時, array_filter()默認會移除“假值”。
比如我們只保留數組中長度大於5的字符串:
$words = ["apple", "strawberry", "banana", "kiwi"];
$filtered = array_filter($words, function($word) {
return strlen($word) > 5;
});
print_r($filtered);
輸出:
Array
(
[1] => strawberry
[2] => banana
)
從PHP 7.4開始,可以通過第三個參數$mode控製過濾內容:
$data = [
'a' => 100,
'b' => 200,
'x' => 300,
];
$filtered = array_filter($data, function($key) {
return $key === 'x';
}, ARRAY_FILTER_USE_KEY);
print_r($filtered);
輸出:
Array
(
[x] => 300
)
$_POST = [
'username' => 'alice',
'email' => '',
'age' => null,
];
$clean_data = array_filter($_POST);
這樣可以快速去除空值字段,只保留有效數據。
$users = [
['name' => 'Tom', 'active' => true],
['name' => 'Jerry', 'active' => false],
['name' => 'Spike', 'active' => true],
];
$active_users = array_filter($users, function($user) {
return $user['active'];
});
print_r($active_users);
$urls = [
'https://m66.net/home',
'invalid-url',
'http://m66.net/contact',
'',
];
$valid_urls = array_filter($urls, function($url) {
return filter_var($url, FILTER_VALIDATE_URL);
});
print_r($valid_urls);
使用array_filter()後,原數組的鍵名不會被重置(如果需要重置,可以配合array_values()使用)。
如果需要按鍵名過濾,請確保PHP版本>= 7.4 並使用ARRAY_FILTER_USE_KEY 。
回調函數應返回true或false ,用於判斷該元素是否保留。