问题描述
我有这种数组:
2020-01; Starter1; 11,4%
2020-01; Starter2; 6,9%
2020-01; Starter3; 9,5%
2020-01; Starter4; 11,1%
2020-02; Starter1; 5,8%
2020-02; Starter2; 5,8%
2020-02; Starter3; 10,0%
2020-02; Starter4; 6,4%
我需要得到这个:
Year; Starter1; Starter2; Starter3; Starter4
2020-01; 11,4%; 6,9%; 9,5%; 11,1%
2020-02; 5,8%; 10,0%; 10,0%; 6,4%
有人可以帮我吗?
解决方法
使用str_getcsv,因为它CSV,然后只分配所述第一和第二列的数组键,正火,然后一旦你有可以循环于其上,并构建了期望的结果。
因此,旨在使这种结构:
Array
(
[2020-01] => Array
(
[Starter1] => 11,4%
[Starter2] => 6,9%
[Starter3] => 9,5%
[Starter4] => 11,1%
)
[2020-02] => Array
(
[Starter1] => 5,8%
[Starter2] => 5,8%
[Starter3] => 10,0%
[Starter4] => 6,4%
)
)
您可以遍历进行:
Year; Starter1; Starter2; Starter3; Starter4
2020-01; 11,4%; 6,9%; 9,5%; 11,1%;
2020-02; 5,8%; 5,8%; 10,0%; 6,4%;
喜欢:
<?php
$str = '2020-01; Starter1; 11,4%
2020-01; Starter2; 6,9%
2020-01; Starter3; 9,5%
2020-01; Starter4; 11,1%
2020-02; Starter1; 5,8%
2020-02; Starter2; 5,8%
2020-02; Starter3; 10,0%
2020-02; Starter4; 6,4%';
// normalise and group data
$result = [];
foreach(str_getcsv($str,"\n") as $row){
$row = array_map('trim',str_getcsv($row,";"));
$result[$row[0]][$row[1]] = $row[2];
}
// loop over to specification
echo 'Year; Starter1; Starter2; Starter3; Starter4'.PHP_EOL;
foreach ($result as $year => $row) {
echo $year.'; ';
foreach ($row as $key => $col)
echo $col.";".str_repeat(' ',(($v = strlen($key)-(strlen($col)-1)) && $v > 0) ? $v : 0);
echo PHP_EOL;
}