在 PHP 中,array_chunk 和 array_column 是两个非常有用的函数,它们可以帮助我们对数组进行灵活的操作。通过合理使用这两个函数,我们可以轻松地实现按列拆分二维数组的操作。本篇文章将会详细介绍如何结合 array_chunk 和 array_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)
假设我们有一个二维数组,其中每个元素都包含若干列的数据。如果我们希望提取出某一列,并将该列的数据按一定的大小拆分成多个小数组,这时就可以用到 array_column 和 array_chunk 的组合使用。
假设我们有以下二维数组:
$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
)
)
在实际应用中,我们经常需要对更复杂的数组进行拆分。假设我们有一个 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);
输出结果: