Search code examples
phparraysmultidimensional-arraymergegrouping

Merge two indexed arrays of associative arrays and group by column value to create an associative array of indexed arrays


I have two 2d arrays and I want to merge them and group their data by a column value.

[
    ["year" => 2015, "value" => 32],
    ["year" => 2016, "value" => 54],
]

and

[
    ["year" => 2015, "value" => 300],
    ["year" => 2016, "value" => 5400]
]

Desired result:

Array(
    [2015]=>array(
        [0] => 32
        [1] => 95
    )
    [2016]=>array(
        [0] => 54
        [1] => 2068
    )
)

Solution

  •  $a = array(
         0 => array
             (
                "year" => 2015,
                "value" => 32
             ),
         1 => array
             (
                "year" => 2016,
                "value" => 54
             )  
     );
    
     $b = array(
         0 => array
            (
               "year" => 2015,
               "value" => 300
            ),
        1 => array
           (
               "year" => 2016,
               "value" => 5400
           )  
    );
    
    $c = array_merge($a,$b);
    
    $output = array();
    foreach($c as $key=>$val)
    {
        $output[$val['year']][] = $val['value'];
    }
    
    echo '<pre>';
    print_r($output);
    exit;
    

    Try this code..