當前位置: 首頁> 最新文章列表> 在不傳回調函數的情況下誤以為不影響結果

在不傳回調函數的情況下誤以為不影響結果

M66 2025-06-04

在PHP 的數組處理函數中, array_filter()是一個非常實用的工具,它的用途是從數組中移除“不符合條件”的元素。然而,它有一個可能讓初學者感到困惑的行為:

那麼,問題來了:

如果你在使用array_filter()時沒有傳遞回調函數,會不會誤以為它對結果沒有影響?

讓我們一起來深入分析。

array_filter 的默認行為

array_filter(array $array, ?callable $callback = null, int $mode = 0): array的第二個參數$ callback是可選的。

當你沒有提供回調函數時, array_filter()會默認使用boolval()來判斷每個元素是否“為真”,並據此決定是否保留它。也就是說,它會移除所有“假值”(falsey)的元素,如:

  • false

  • 0 (整數或字符串)

  • null

  • 空字符串""

  • 空數組[]

示例一:未傳入回調函數

$data = [0, 1, false, 2, '', 3, null];

$result = array_filter($data);

print_r($result);

輸出結果為:

 Array
(
    [1] => 1
    [3] => 2
    [5] => 3
)

你會發現, 0false''null都被過濾掉了。

示例二:誤以為不傳回調就不處理

許多初學者會以為:

“我不傳入回調函數,就等於不做任何處理,只是返回原始數組。”

但顯然這是一種誤解。實際上,默認行為本身就帶有過濾邏輯,並且是基於“布爾真值”的。

示例三:自己定義回調邏輯

如果你希望只過濾掉null值,而保留0false 、空字符串等內容,可以顯式傳入一個回調函數:

 $data = [0, 1, false, 2, '', 3, null];

$result = array_filter($data, function($item) {
    return $item !== null;
});

print_r($result);

輸出結果:

 Array
(
    [0] => 0
    [1] => 1
    [2] => 
    [3] => 2
    [4] => 
    [5] => 3
)

這時,只有null被過濾,其他“假值”仍然保留。

小結

在不傳回調函數的情況下, array_filter()並不是“不處理”,而是默認為你過濾掉所有布爾意義上的“假值”。這在數據清洗時很有用,但也容易引起誤會。

為了避免邏輯上的混淆,建議你:

  • 明確你希望過濾的具體內容;

  • 若有自定義邏輯需求,請始終顯式傳入回調函數;

  • 注意保留鍵名(默認保留原數組的鍵名)。

延伸閱讀

你可以訪問如下頁面查看此函數在實際應用中的更多示例(示例地址域名已替換為m66.net ):