当前位置: 首页> 最新文章列表> 使用 array_column 和 array_filter 获取指定条件的列

使用 array_column 和 array_filter 获取指定条件的列

M66 2025-05-11

在 PHP 中,array_columnarray_filter 函数是处理数组数据时非常有用的工具,尤其是在需要从一个二维数组中提取符合特定条件的指定列数据时。本文将介绍如何使用这两个函数来完成此类操作。

array_column 函数简介

array_column 函数用于从一个多维数组中提取出某一列的值,并返回一个新数组。它的基本语法如下:

array_column(array $array, $column_key, $index_key = null): array
  • $array:输入的多维数组。

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

  • $index_key(可选):如果提供此参数,返回的数组将会使用该键作为新数组的键。

举个例子,假设我们有如下的二维数组:

$data = [
    ['id' => 1, 'name' => 'John', 'age' => 25],
    ['id' => 2, 'name' => 'Jane', 'age' => 30],
    ['id' => 3, 'name' => 'Joe', 'age' => 22],
];

我们可以通过 array_column 函数提取所有用户的 name 列:

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

输出将会是:

Array
(
    [0] => John
    [1] => Jane
    [2] => Joe
)

array_filter 函数简介

array_filter 函数用于过滤数组中的元素,返回符合条件的元素。它的基本语法如下:

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

  • $callback:回调函数,用于过滤数组的条件。

  • $mode(可选):过滤的模式,ARRAY_FILTER_USE_KEY 用于按键过滤,ARRAY_FILTER_USE_BOTH 按键和值过滤,默认按值过滤。

假设我们希望从前面的数组中筛选出年龄大于 24 岁的用户,可以使用 array_filter 配合一个回调函数:

$filteredData = array_filter($data, function($person) {
    return $person['age'] > 24;
});
print_r($filteredData);

输出将会是:

Array
(
    [1] => Array
        (
            [id] => 2
            [name] => Jane
            [age] => 30
        )
    [0] => Array
        (
            [id] => 1
            [name] => John
            [age] => 25
        )
)

结合 array_columnarray_filter 提取符合条件的指定列数据

如果你想要结合 array_columnarray_filter 来提取符合特定条件的指定列数据,可以先使用 array_filter 函数来过滤数组,然后再使用 array_column 函数提取相应的列。

举个例子,假设我们需要找出所有年龄大于 24 岁的用户的 name 列:

$filteredNames = array_column(
    array_filter($data, function($person) {
        return $person['age'] > 24;
    }),
    'name'
);

print_r($filteredNames);

输出将会是:

Array
(
    [0] => John
    [1] => Jane
)

这个例子展示了如何通过先过滤数据(array_filter)然后提取需要的列(array_column)来得到符合条件的数据。

示例:结合 array_columnarray_filter 从 URL 获取数据

如果你的数据来源是一个 API 或网站的返回结果,通常返回的数据是一个包含多个元素的 JSON 对象。例如,假设我们从 https://api.m66.net/users 获取了用户数据,并且我们只关心符合特定条件(如年龄大于 24 岁)的用户名字。你可以像这样进行操作:

$url = "https://api.m66.net/users";
$response = file_get_contents($url);
$data = json_decode($response, true);

$filteredNames = array_column(
    array_filter($data, function($person) {
        return $person['age'] > 24;
    }),
    'name'
);

print_r($filteredNames);

在这个示例中,首先通过 file_get_contentsm66.net 获取了用户数据,然后使用 array_filter 来筛选年龄大于 24 岁的用户,最后通过 array_column 提取他们的 name 列。

通过 array_columnarray_filter 函数的结合,你可以轻松地从复杂的二维数组中提取符合条件的特定列数据。这种方法对于处理 API 返回的数据、数据库查询结果等非常有用,可以大大简化数据处理的复杂度。