當前位置: 首頁> 最新文章列表> 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);

輸出結果: