etl — переформатировать таблицу со столбцами день-месяц-год, чтобы каждая дата была заголовком столбца в переполнении стека

Предположим, у вас есть ассоциативный массив в PHP с табличными данными, который выглядит следующим образом:

KPIName     Year    Month   Day KPICount
AEAD10D-LRZ 2014    7       30  29
AEAD10D-LRZ 2014    7       31  40
AEAD10D-LRZ 2014    8       1   49
AEAD10D-LRZ 2014    8       2   34
AEAD10D-LRZ 2014    8       3   32
AEAD10D-LRZ 2014    8       4   30
AEAD10D-LRZ 2014    8       5   30
AEAD20D-LRZ 2014    7       30  25
AEAD20D-LRZ 2014    7       31  31
AEAD20D-LRZ 2014    8       1   47
AEAD20D-LRZ 2014    8       2   17
AEAD20D-LRZ 2014    8       3   12
AEAD20D-LRZ 2014    8       4   37
AEAD20D-LRZ 2014    8       5   30

Каков наиболее эффективный способ переформатировать это в следующую структуру данных:

KPIName     2014-07-30  2014-07-31  2014-08-01  2014-08-02  2014-08-03  2014-08-04  2014-08-05
AEAD10D-LRZ 29          40          49          34          32          30          30
AEAD20D-LRZ 25          31          47          17          12          37          30

1

Решение

Есть несколько способов сделать это, вот один из способов.

// your associative array
$data = array(
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>7, "Day"=>30, "KPICount"=>29),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>7, "Day"=>31, "KPICount"=>40),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>1, "KPICount"=>49),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>2, "KPICount"=>34),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>3, "KPICount"=>32),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>4, "KPICount"=>30),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>5, "KPICount"=>30),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>7, "Day"=>30, "KPICount"=>25),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>7, "Day"=>31, "KPICount"=>31),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>1, "KPICount"=>47),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>2, "KPICount"=>17),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>3, "KPICount"=>12),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>4, "KPICount"=>37),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>5, "KPICount"=>30),
);

// array to hold reordered array
$newdata = array();

// reorder your array to $newdata, grouped by KPIName with the data as the key
foreach($data as $row){
$newdata[$row["KPIName"]][$row["Year"]."-".$row["Month"]."-".$row["Day"]]=$row["KPICount"];

}

// get the date keys to use as headers
$headers = array_keys(reset($newdata));

// build the table
echo "<table><tr>";
echo "<td>KPIName</td>";
// loop through the date headers
foreach($headers as $header){
echo "<td>{$header}</td>";
}
echo "</tr>";

// loop through each KPIName row
foreach($newdata as $key=>$row){
echo "<tr>";
echo "<td>{$key}</td>";

// loop through each date value
foreach($row as $data){
echo "<td>{$data}</td>";
}
echo "</tr>";
}
echo "</table>";
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]