如何将具有匹配特征的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应该是一个与您想要的输出匹配的数组.这可以在创建第一个数组时完成,但会变得非常混乱.因此,即使它创建了两个循环,它也可以防止对嵌套循环的需求,并且可能比在一个块中执行它更有效.

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...