当前位置: 首页> 最新文章列表> array_filter() 基本用法详解

array_filter() 基本用法详解

M66 2025-05-14

在PHP开发中,数组是非常常用的数据结构。而在操作数组时,我们经常需要对数组进行过滤,比如去除空值、保留满足某些条件的元素等等。array_filter() 函数就是专门为此而设计的一个非常实用的工具。

本文将详细讲解 array_filter() 的基本用法、参数含义以及一些常见的使用场景,帮助你快速掌握这个函数的实际应用。

一、array_filter()函数简介

array_filter() 是PHP内置函数之一,它的作用是使用回调函数对数组中的每个元素进行过滤,仅保留返回值为 true 的元素。它的语法如下:

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

参数说明:

  • $array:要过滤的原始数组。

  • $callback(可选):用于判断是否保留某个元素的回调函数。如果为 null,则默认移除值为 falsenull、空字符串 ''、数字0、空数组 []等“假值”。

  • $mode(PHP 7.4+):指定传递给回调函数的内容,是值、键,还是键值对。

二、基本用法示例

1. 去除数组中的“假值”

这是最常见的使用方式,适用于清理表单数据或配置项等:

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

$filtered = array_filter($data);

print_r($filtered);

输出结果:

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

没有传入回调函数时,array_filter() 默认会移除“假值”。

2. 使用回调函数自定义过滤逻辑

比如我们只保留数组中长度大于5的字符串:

$words = ["apple", "strawberry", "banana", "kiwi"];

$filtered = array_filter($words, function($word) {
    return strlen($word) > 5;
});

print_r($filtered);

输出:

Array
(
    [1] => strawberry
    [2] => banana
)

3. 按照键名过滤(使用 ARRAY_FILTER_USE_KEY)

从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
)

三、array_filter() 常见应用场景

1. 表单数据清洗

$_POST = [
    'username' => 'alice',
    'email' => '',
    'age' => null,
];

$clean_data = array_filter($_POST);

这样可以快速去除空值字段,只保留有效数据。

2. 过滤符合某些条件的用户数据

$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);

3. 动态过滤URL列表中的合法链接

$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

  • 回调函数应返回 truefalse,用于判断该元素是否保留。