当前位置: 首页> 最新文章列表> array_chunk 与 array_column 配合,按列拆分二维数组

array_chunk 与 array_column 配合,按列拆分二维数组

M66 2025-04-26

在 PHP 中,array_chunkarray_column 是两个非常有用的函数,它们可以帮助我们对数组进行灵活的操作。通过合理使用这两个函数,我们可以轻松地实现按列拆分二维数组的操作。本篇文章将会详细介绍如何结合 array_chunkarray_column 来实现这一目标。

1. 理解 array_chunkarray_column

  • array_column:该函数可以从一个多维数组中提取某一列的值。它的常见用法是获取指定列的所有值,而不需要手动循环。

    array_column(array $array, mixed $column_key, mixed $index_key = null)
    
  • array_chunk:该函数将一个数组分割成多个小数组,每个小数组最多包含指定数量的元素。这样可以有效地对大数组进行拆分。

    array_chunk(array $array, int $size, bool $preserve_keys = false)
    

2. 按列拆分二维数组的目标

假设我们有一个二维数组,其中每个元素都包含若干列的数据。如果我们希望提取出某一列,并将该列的数据按一定的大小拆分成多个小数组,这时就可以用到 array_columnarray_chunk 的组合使用。

3. 示例代码

假设我们有以下二维数组:

$data = [
    ['id' => 1, 'name' => 'Tom', 'age' => 28],
    ['id' => 2, 'name' => 'Jerry', 'age' => 30],
    ['id' => 3, 'name' => 'Mickey', 'age' => 25],
    ['id' => 4, 'name' => 'Donald', 'age' => 35],
    ['id' => 5, 'name' => 'Goofy', 'age' => 40],
    ['id' => 6, 'name' => 'Pluto', 'age' => 22]
];

如果我们只想提取 name 这一列,并且按每 2 个元素进行拆分,我们可以使用如下代码:

// 提取 'name' 列
$names = array_column($data, 'name');

// 按每 2 个元素拆分
$chunkedNames = array_chunk($names, 2);

// 输出拆分后的数组
print_r($chunkedNames);

输出结果:

Array
(
    [0] => Array
        (
            [0] => Tom
            [1] => Jerry
        )

    [1] => Array
        (
            [0] => Mickey
            [1] => Donald
        )

    [2] => Array
        (
            [0] => Goofy
            [1] => Pluto
        )
)

4. 使用 array_chunkarray_column 组合处理复杂数据

在实际应用中,我们经常需要对更复杂的数组进行拆分。假设我们有一个 URL 地址列表,并且希望提取出每个 URL 的主域名部分,然后按每 3 个域名进行拆分。假设原始数据如下:

$data = [
    ['url' => 'http://www.m66.net/page1', 'other' => 'data1'],
    ['url' => 'http://www.m66.net/page2', 'other' => 'data2'],
    ['url' => 'http://www.m66.net/page3', 'other' => 'data3'],
    ['url' => 'http://www.m66.net/page4', 'other' => 'data4'],
    ['url' => 'http://www.m66.net/page5', 'other' => 'data5'],
    ['url' => 'http://www.m66.net/page6', 'other' => 'data6']
];

我们首先使用 array_column 提取出所有的 URL,然后使用 parse_url 函数获取主域名,最后使用 array_chunk 将域名按 3 个一组拆分。

// 提取 'url' 列
$urls = array_column($data, 'url');

// 获取每个 URL 的主域名部分
$domains = array_map(function($url) {
    return parse_url($url, PHP_URL_HOST);
}, $urls);

// 按每 3 个域名拆分
$chunkedDomains = array_chunk($domains, 3);

// 输出拆分后的域名数组
print_r($chunkedDomains);

输出结果: