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

如何将具有匹配特征的PHP数组元素处理成一系列聚合?

基本上我想对PHP数组执行一种分组,然后将每个组中的元素压缩成单个聚合值.

具体来说,我有一个PHP数组,其格式如下:

[
    [date, int],
    [date, int],
    [date, int],
    ...
    [date, int]
]

我想处理这个,以便最终得到一个数组数组,每个数组包含一个唯一的日期和原始数组中与该日期一起的整数的总和,例如:

[
    ['2017-01-01', 1],
    ['2017-01-01', 1],
    ['2018-01-01', 1],
    ['2019-01-01', 1],
    ['2019-01-01', -1],
    ['2020-01-01', -1],
    ['2020-01-01', 1],
    ['2020-01-01', -1]
]

应该导致:

[
    ['2017-01-01', 2],
    ['2018-01-01', 1],
    ['2019-01-01', 0],
    ['2020-01-01', -1]
]

原始数组按日期顺序排列.

实现这一目标的有效方法是什么?

解决方法:

也许是这样的(假设你上面的数组数组叫做$source):

$destination = array();
foreach ( $source as $date_value ) {
    if ( isset( $destination[ $date_value[0] )) {
        $destination[ $date_value[0] ] += $date_value[1];
    } else {
        $destination[ $date_value[0] ] = $date_value[1];
    }
}

这将创建一个数组,其中日期为键,总和为这些键的值.不是你要求的具体内容.否则格式化:

$new_destination = array();
foreach ( $destination as $key => value ) {
    $new_destination[] = array( $key, $value );
}

现在$new_destination应该是一个与您想要的输出匹配的数组.这可以在创建第一个数组时完成,但会变得非常混乱.因此,即使它创建了两个循环,它也可以防止对嵌套循环的需求,并且可能比在一个块中执行它更有效.

请注意,我没有对此进行测试,因此可能包含语法错误或需要稍微修改以获得所需内容,但它应该让您走上正确的轨道.

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

相关推荐