微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用来自另一个数组行的列实现新数组? [PHP]

如何解决如何使用来自另一个数组行的列实现新数组? [PHP]

我有这种数组:

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;
}

https://3v4l.org/11VaW

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。