在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);
輸出結果: