當前位置: 首頁> 最新文章列表> 如何使用array_filter() 過濾數組中的空值

如何使用array_filter() 過濾數組中的空值

M66 2025-06-05

在PHP 開發中,數組操作是日常工作中最常見的一環。而“清洗數組”這件事,我們幾乎天天都在做。無論是處理用戶提交的表單數據,還是清理接口返回的數據,其中最常見的需求之一就是。

幸運的是,PHP 提供了一個非常優雅的方法: array_filter() 。本文將帶你深入了解這個函數的用法,並分享一些實用技巧,幫你高效、靈活地過濾數組中的空元素。

基本用法:一行代碼,乾淨利落

PHP 的array_filter()默認行為就是移除數組中值為“false”的元素,包括:

  • 空字符串''

  • 數字0 和字符串'0'

  • null

  • false

  • 空數組[]

來看一個最簡單的例子:

 $data = ['apple', '', null, 'banana', 0, '0', false];

$filtered = array_filter($data);

print_r($filtered);

輸出結果為:

 Array
(
    [0] => apple
    [3] => banana
)

你會發現, array_filter()默認就把那些“看上去沒內容”的值都去掉了。這種用法對於大多數場景已經足夠好。

自定義過濾邏輯:更精準地篩選

如果你不希望'0'0被過濾掉,那就可以自定義一個回調函數,讓array_filter()只過濾掉你真正認為是“空”的值,比如null''

 $data = ['title' => '', 'price' => 0, 'available' => false, 'sku' => '0', 'description' => null];

$filtered = array_filter($data, function($value) {
    return !is_null($value) && $value !== '';
});

print_r($filtered);

輸出:

 Array
(
    [price] => 0
    [available] => 
    [sku] => 0
)

這種方式特別適合處理用戶表單數據或配置項,不會誤刪有意義的“零值”。

應用案例:清理表單數據再提交

假設你要將用戶輸入的數據通過POST 請求發送給某個API,我們不希望把空值傳過去:

 $formData = [
    'name' => '張三',
    'email' => '',
    'phone' => null,
    'age' => 25
];

$cleanData = array_filter($formData, function($val) {
    return !is_null($val) && $val !== '';
});

$apiUrl = 'https://api.m66.net/user/submit';

$options = [
    'http' => [
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($cleanData),
    ]
];

$context  = stream_context_create($options);
$result = file_get_contents($apiUrl, false, $context);

echo $result;

通過這種方式,我們只發送有效數據,避免讓API 收到一堆沒用的字段。

小技巧:遞歸過濾多維數組

如果你的數組是多維的,比如從前端提交的嵌套表單,那就需要用遞歸的方式去清理:

 function recursive_filter(array $input) {
    foreach ($input as $key => &$value) {
        if (is_array($value)) {
            $value = recursive_filter($value);
        }
    }
    return array_filter($input, function($val) {
        return $val !== '' && !is_null($val);
    });
}

$data = [
    'user' => [
        'name' => '李四',
        'email' => '',
        'tags' => ['', null, 'developer']
    ],
    'status' => null
];

$cleaned = recursive_filter($data);

print_r($cleaned);

這樣處理後,你的數組幹乾淨淨,既不會漏刪空值,也不會錯刪有效內容。

總結:array_filter() 是你處理數據的好幫手

通過上面的案例,我們可以看到:

  • array_filter()默認行為已經很強大,快速去掉各種“假值”。

  • 搭配自定義回調,你可以精確控制要過濾的內容。

  • 處理複雜結構時,用遞歸方式也能輕鬆應對。

  • 實際開發中,它可以用於清理表單數據、接口請求參數、甚至數據庫寫入前的數據過濾。

總之,這個函數用得越熟練,你的數據就越乾淨,代碼也會更優雅!