代码之家  ›  专栏  ›  技术社区  ›  daniyalahmad

组合具有相同值的数组并添加其他

  •  1
  • daniyalahmad  · 技术社区  · 4 年前

    我试图找到一种方法来组合具有相同值的数组,并添加关联数组的其他值。

    我有一系列类似的东西:

    Array
    (
        [0] => Array
            (
                [count] => 3
                [date] => 2022-05-05
                [audio_click] => 2
            )
    
        [1] => Array
            (
                [count] => 1
                [date] => 2022-05-06
                [audio_click] => 0
            )
    
        [2] => Array
            (
                [count] => 4
                [date] => 2022-05-05
                [audio_click] => 5
            )
    
        [3] => Array
            (
                [count] => 18
                [date] => 2022-05-06
                [audio_click] => 14
            )
    
        [4] => Array
            (
                [count] => 1
                [date] => 2022-05-07
                [audio_click] => 0
            )
    
    )
    

    输出应如下所示:

    Array
    (
        [0] => Array
            (
                [count] => 7
                [date] => 2022-05-05
                [audio_click] => 7
            )
    
        [1] => Array
            (
                [count] => 19
                [date] => 2022-05-06
                [audio_click] => 14
            )
    
        [2] => Array
            (
                [count] => 1
                [date] => 2022-05-07
                [audio_click] => 0
            )
    
    )
    

    到目前为止,我实现了以下代码:

    $data = $map_data_array;
    //$data is the array in which you have data originally
    foreach($data as $arrayK => $arrayV){
            $count_st = $data[$arrayV['date']]['count'] + $arrayV['count'];
            $data[$arrayV['date']]['count'] = $count_st;
    
            $audio_click = $data[$arrayV['date']]['audio_click'] + $arrayV['audio_click'];
            $data[$arrayV['date']]['audio_click'] = $audio_click;
    }
    

    但它给了我以下输出:

    Array
    (
        [0] => Array
            (
                [count] => 3
                [date] => 2022-05-05
                [audio_click] => 2
            )
    
        [1] => Array
            (
                [count] => 1
                [date] => 2022-05-06
                [audio_click] => 0
            )
    
        [2] => Array
            (
                [count] => 4
                [date] => 2022-05-05
                [audio_click] => 5
            )
    
        [3] => Array
            (
                [count] => 18
                [date] => 2022-05-06
                [audio_click] => 14
            )
    
        [4] => Array
            (
                [count] => 1
                [date] => 2022-05-07
                [audio_click] => 0
            )
    
        [2022-05-05] => Array
            (
                [count] => 7
                [audio_click] => 7
            )
    
        [2022-05-06] => Array
            (
                [count] => 19
                [audio_click] => 14
            )
    
        [2022-05-07] => Array
            (
                [count] => 1
                [audio_click] => 0
            )
    
    )
    

    不确定,我做错了什么?

    1 回复  |  直到 4 年前
        1
  •  2
  •   trincot    4 年前

    您的方法已经正确地执行了聚合,但您必须在 新 数组,而不是原始数组。在这个过程的最后,你可能想把关联结果数组变成一个 索引 数组(因此不再使用日期值作为键,而只使用0、1、2…):

    foreach($data as $key => $elem) {
        if (!isset($result[$elem["date"]])) {
            $result[$elem["date"]] = $elem;
        } else {
            $result[$elem["date"]]["count"] += $elem['count'];
            $result[$elem["date"]]["audio_click"] += $elem['audio_click'];
        }
    }
    $result = array_values($result); // optional