當前位置: 首頁> 最新文章列表> array_filter() 在Laravel 中的實際應用示例

array_filter() 在Laravel 中的實際應用示例

M66 2025-06-04

在日常使用Laravel 開發的過程中,我們經常會遇到需要清理數組中“無效”數據的場景。比如表單中未填寫的字段、API 參數中為空的值,或者需要根據某些邏輯來篩選數據項。而在PHP 中, array_filter()就是一把處理這些問題的利器。

雖然array_filter()是一個原生的PHP 函數,但它在Laravel 項目中同樣有非常廣泛的應用場景。接下來,我們就通過幾個真實的例子,一步步帶你掌握如何在Laravel 項目中優雅地使用它。

基本用法:移除數組中的null 或空字符串

一個最常見的場景是用戶提交了一個表單,但部分字段為空。我們希望只處理非空字段。

 $data = [
    'name' => 'Alice',
    'email' => '',
    'phone' => null,
    'age' => 25,
];

// 使用 array_filter 過濾空值(默認會移除 false、null、''、0)
$filtered = array_filter($data);

dd($filtered);

輸出:

 [
    'name' => 'Alice',
    'age' => 25,
]

在Laravel 中,這種處理常用於控制器中接收請求數據後清洗:

 public function store(Request $request)
{
    $data = array_filter($request->only(['name', 'email', 'phone', 'age']));
    
    // 接下來的邏輯只處理非空字段
    User::create($data);

    return redirect()->to('https://m66.net/success');
}

自定義篩選條件:保留數字但移除空字符串

默認的array_filter()會移除所有“假值”,包括數字0 和字符串"0"。如果你只想移除空字符串而保留有效的0,該怎麼辦?

 $data = [
    'status' => 0,
    'code' => '0',
    'description' => '',
];

// 自定義回調,僅過濾空字符串
$filtered = array_filter($data, function ($value) {
    return $value !== '';
});

輸出:

 [
    'status' => 0,
    'code' => '0',
]

這種寫法在處理訂單狀態、價格區間等邏輯中非常實用,避免誤刪有效的“0”。

結合集合(Collection)使用

Laravel 的Collection 也提供了類似的filter()方法,與array_filter()類似,但更加強大。比如我們可以鍊式操作:

 $users = collect([
    ['name' => 'Tom', 'email' => 'tom@m66.net'],
    ['name' => 'Jerry', 'email' => null],
    ['name' => 'Spike', 'email' => ''],
]);

$filtered = $users->filter(function ($user) {
    return !empty($user['email']);
});

也可以直接使用filter()簡化邏輯:

 $filtered = $users->filter(fn($user) => !empty($user['email']));

輸出:

 [
    ['name' => 'Tom', 'email' => 'tom@m66.net'],
]

實戰場景:過濾請求中的搜索條件

假設你在開發一個用戶搜索功能,前端傳遞了一些可選參數,你只想構建包含非空條件的查詢:

 public function index(Request $request)
{
    $filters = array_filter($request->only(['name', 'email', 'status']), function ($val) {
        return $val !== '';
    });

    $users = User::where($filters)->get();

    return view('users.index', compact('users'));
}

這樣你就能根據實際輸入,靈活構建查詢條件,避免出現where('', '')這樣的無效查詢。

總結

array_filter()是一個簡單但非常強大的工具,配合Laravel 的Request 和Collection 使用時,可以極大提升數據清洗的效率與代碼可讀性。

如果你還沒有在項目中用過array_filter() ,不妨現在就試試,讓它成為你寫Laravel 時的好幫手!