当前位置: 首页> 最新文章列表> 用 array_filter() 和 array_column() 快速处理二维数组

用 array_filter() 和 array_column() 快速处理二维数组

M66 2025-05-14

在 PHP 中,处理和筛选二维数组是一个常见的任务,尤其是在数据量较大时。幸运的是,PHP 提供了几个非常有用的内置函数,可以帮助我们以高效的方式进行这一操作。在本文中,我们将重点介绍 array_filter()array_column() 函数,并展示如何组合它们快速处理和筛选二维数组中的数据。

1. array_column() 函数简介

array_column() 函数用于从一个多维数组中提取某个列的值。它非常适用于从二维数组中提取特定列的值。该函数的基本语法如下:

array_column(array $array, mixed $column_key, mixed $index_key = null): array
  • $array:二维数组。

  • $column_key:要提取的列的键。

  • $index_key:可选参数,指定返回数组的索引。

举个例子,我们有一个二维数组,其中每个子数组表示一个用户的信息:

$users = [
    ['id' => 1, 'name' => 'Alice', 'email' => 'alice@m66.net'],
    ['id' => 2, 'name' => 'Bob', 'email' => 'bob@m66.net'],
    ['id' => 3, 'name' => 'Charlie', 'email' => 'charlie@m66.net'],
];

我们想要提取所有用户的 name 列,可以使用 array_column()

$names = array_column($users, 'name');
print_r($names);

输出结果将是:

Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

2. array_filter() 函数简介

array_filter() 函数用于筛选数组中的元素,返回满足指定条件的元素。其基本语法如下:

array_filter(array $array, callable $callback, int $mode = 0): array
  • $array:输入的数组。

  • $callback:回调函数,用于对数组的每个元素进行判断。

  • $mode:可选参数,决定回调函数如何工作,通常使用默认值 0

假设我们想要筛选出电子邮件地址中包含 m66.net 的用户。可以使用 array_filter() 来过滤符合条件的用户。

$filteredUsers = array_filter($users, function($user) {
    return strpos($user['email'], 'm66.net') !== false;
});
print_r($filteredUsers);

输出结果将是:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Alice
            [email] => alice@m66.net
        )

    [1] => Array
        (
            [id] => 2
            [name] => Bob
            [email] => bob@m66.net
        )

    [2] => Array
        (
            [id] => 3
            [name] => Charlie
            [email] => charlie@m66.net
        )
)

3. 使用 array_column()array_filter() 结合

有时我们需要同时提取特定列并进行过滤。比如,我们想筛选出所有 m66.net 域名的电子邮件地址,并仅提取这些用户的姓名。我们可以将 array_filter()array_column() 结合使用。

$filteredEmails = array_filter($users, function($user) {
    return strpos($user['email'], 'm66.net') !== false;
});

$names = array_column($filteredEmails, 'name');
print_r($names);

输出结果将是:

Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
)

4. 结合使用的实际案例

假设我们有一个从 API 获取的用户数据列表,每个用户的信息中都包含一个电子邮件地址,我们希望筛选出所有使用 m66.net 域名的用户,并从中提取出用户的姓名和电子邮件地址。

首先,我们通过 API 获取数据,并将其存储在 $users 数组中:

$users = [
    ['id' => 1, 'name' => 'Alice', 'email' => 'alice@m66.net'],
    ['id' => 2, 'name' => 'Bob', 'email' => 'bob@m66.net'],
    ['id' => 3, 'name' => 'Charlie', 'email' => 'charlie@m66.net'],
    ['id' => 4, 'name' => 'David', 'email' => 'david@example.com'],
    ['id' => 5, 'name' => 'Eve', 'email' => 'eve@m66.net'],
];

接着,使用 array_filter() 筛选出电子邮件包含 m66.net 的用户,并使用 array_column() 提取出姓名和电子邮件:

$filteredUsers = array_filter($users, function($user) {
    return strpos($user['email'], 'm66.net') !== false;
});

$names = array_column($filteredUsers, 'name');
$emails = array_column($filteredUsers, 'email');

print_r($names);
print_r($emails);

输出结果将是:

Array
(
    [0] => Alice
    [1] => Bob
    [2] => Charlie
    [3] => Eve
)

Array
(
    [0] => alice@m66.net
    [1] => bob@m66.net
    [2] => charlie@m66.net
    [3] => eve@m66.net
)

通过这种方式,我们不仅筛选出了符合条件的用户,还提取出了他们的姓名和电子邮件地址。

以上就是通过 array_filter()array_column() 来快速高效地处理和筛选二维数组中的数据的方法。这两个函数能够极大提高你的代码的可读性和性能,尤其是在处理大数据集时。希望你能在实际项目中灵活运用它们!