PHPでは、 array_chunkとarray_columnは、アレイで柔軟な操作を実行するのに役立つ2つの非常に便利な関数です。これら2つの機能を合理的に使用することにより、列ごとに2次元配列を分割する操作を簡単に実装できます。この記事では、この目標を達成するために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)
各要素に複数の列のデータが含まれる2次元配列があるとします。列を抽出し、特定のサイズに応じて列のデータを複数の小さな配列に分割する場合は、 array_columnとarray_chunkの組み合わせを使用できます。
次の2次元配列があるとします。
$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]
];
名前の列を抽出し、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);
出力結果: