在日常開發中,我們常常需要對數據進行透視(pivot)轉換。透視表通常用來重新排列、匯總、計算或轉換數據,使其更易於分析。在PHP 中,我們可以利用內置函數array_column來實現數據的透視轉換,尤其是在處理二維數組時。
數據透視轉換的主要目的是將數據從一個二維數組的形式重新排列,通常是將一個列的數據變為表格的列標題,而將原來的行數據轉化為列數據。這種轉換非常適合用來分析數據,尤其是當你從外部API 獲取到復雜數據時,能夠有效提升分析效率。
PHP 的array_column函數允許你從多維數組中提取一個單獨的列。這個函數非常適合在數據透視操作中提取需要的列。其基本用法如下:
array_column(array $array, mixed $column_key, mixed $index_key = null): array
$array :輸入的多維數組。
$column_key :需要提取的列名或列索引。
$index_key :可選參數,指定作為結果數組的鍵名。
假設我們有一個二維數組,表示一個銷售數據表格,包含了不同的銷售人員和他們的銷售額:
$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提取出所有銷售人員( salesperson )和他們的銷售額( sales ):
$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);
輸出結果: