毎日の開発では、データのピボット変換を実行する必要があることがよくあります。ピボットテーブルは、データを再配置、要約、計算、または変換するためによく使用され、分析が容易になります。 PHPでは、組み込み関数Array_Columnを使用して、特に2次元配列を扱う場合、データのパースペクティブ変換を実装できます。
ピボット変換の主な目的は、2次元配列からデータを再配置し、通常、列のデータをテーブルの列ヘッダーに変更し、元の行データを列データに変換することです。この変換は、特に外部APIから複雑なデータを取得する場合にデータの分析に非常に適しており、分析効率を効果的に改善できます。
PHPのarray_column関数を使用すると、多次元配列から個別の列を抽出できます。この関数は、ピボット操作で必要な列を抽出するのに非常に適しています。基本的な使用法は次のとおりです。
array_column(array $array, mixed $column_key, mixed $index_key = null): array
$ array :入力多次元配列。
$ column_key :抽出する必要がある列名または列インデックス。
$ index_key :オプションのパラメーター。キー名を結果配列として指定します。
さまざまな営業担当者とその販売を含む販売データテーブルを表す2次元配列があるとします。
$data = [
['salesperson' => 'Alice', 'region' => 'North', 'sales' => 1500],
['salesperson' => 'Bob', 'region' => 'South', 'sales' => 2000],
['salesperson' => 'Alice', 'region' => 'East', 'sales' => 1200],
['salesperson' => 'Bob', 'region' => 'West', 'sales' => 1800],
['salesperson' => 'Alice', 'region' => 'South', 'sales' => 2500],
];
このデータを営業担当者がグループ化し、各地域の販売を表示するテーブルにピボットしたい場合は、 Array_Columnを使用して対応する列を抽出し、適切なロジックを使用してデータの再編成を完了できます。
まず、 array_columnを使用して、すべての営業担当者(営業担当者)とその販売(販売)を抽出します。
$salespeople = array_column($data, 'salesperson');
$sales = array_column($data, 'sales');
次に、サイクルを通じて営業担当者による販売を要約できます。
$pivotedData = [];
foreach ($data as $row) {
$salesperson = $row['salesperson'];
$region = $row['region'];
$sales = $row['sales'];
// この営業担当者が結果にない場合,初期化
if (!isset($pivotedData[$salesperson])) {
$pivotedData[$salesperson] = [];
}
// 営業担当者の記録に地域ごとの販売を追加します
$pivotedData[$salesperson][$region] = $sales;
}
print_r($pivotedData);
上記のコードを実行した後、営業担当者とエリアからデータの観点が取得されます。
Array
(
[Alice] => Array
(
[North] => 1500
[East] => 1200
[South] => 2500
)
[Bob] => Array
(
[South] => 2000
[West] => 1800
)
)
いくつかのシナリオでは、URLを処理する必要がある場合があります。 URLを含むいくつかのフィールドを含む次の配列があるとします。これらのURLのドメイン名をM66.netに置き換える必要があります。
$dataWithUrls = [
['name' => 'Alice', 'website' => 'http://www.example.com'],
['name' => 'Bob', 'website' => 'http://www.test.com'],
];
foreach ($dataWithUrls as &$row) {
$url = parse_url($row['website']);
$row['website'] = str_replace($url['host'], 'm66.net', $row['website']);
}
print_r($dataWithUrls);
出力結果: