Search code examples
phparraysarray-merge

Problems in merging two associative arrays in php


I have two arrays in PHP.I am facing difficulty in merging this two arrays

$scheduleArray0=Array ([04/04/2016] => 
                    Array ( [TypeName_1] => Weekly
                          [TypeID_1] => 3)
                   [04/05/2016] =>
                    Array ( [TypeName_1] => Weekly 
                          [TypeID_1] => 3  ) 
                   )


 $scheduleArray1 = Array ( [04/04/2016] => 
                   Array ( [TypeName_2] => Biweekly 
                           [TypeID_2] => 7 ) 
                     [04/05/2016] =>
                  Array ( [TypeName_2] => Biweekly 
                          [TypeID_2] => 7 ) ) .

I need it to merge like this.ie My required output

$final =    Array ( [04/04/2016] => 
                  Array ( [TypeName_1] => Weekly [TypeID_1] => 3 
                          [TypeName_2] => Biweekly [TypeID_2] => 7 )
               [04/05/2016] => 
                  Array ( [TypeName_1] => Weekly [TypeID_1] => 3
                          [TypeName_2] => Biweekly [TypeID_2] => 7 ) )

For merging I have used the following code

$final = merge_common_keys($scheduleArray0,$scheduleArray1);

Its giving me the following multidimensional array.This is what I get

Array ([04/04/2016] => 
        Array ( [0] => Array ( [TypeName_1] => Weekly [TypeID_1] => 3 )
                [1] => Array ( [TypeName_2] => Biweekly [TypeID_2] => 7  )) 
       [04/05/2016] => 
        Array ( [0] => Array ( [TypeName_1] => Weekly [TypeID_1] => 3  ) 
                [1] => Array ( [TypeName_2] => Biweekly [TypeID_2] => 7 ) )

The user defined function-merge_common_keys

function merge_common_keys(){
    $arr = func_get_args();
    $num = func_num_args();

    $keys = array();
    $i = 0;
    for ($i=0; $i<$num; ++$i){
        $keys = array_merge($keys, array_keys($arr[$i]));
    }
    $keys = array_unique($keys);

    $merged = array();

    foreach ($keys as $key){
        $merged[$key] = array();
        for($i=0; $i<$num; ++$i){
            $merged[$key][] = isset($arr[$i][$key]) ? $arr[$i][$key] : null;
        }
    }
    return $merged;

}

EDIT -When I merged two arrays with array_merge(),I am not getting the $schedule_array0 values in the merged array


Solution

  • This should do the trick:

    function merge_common_keys() {
        $arrays = func_get_args();
        $result = [];
    
        foreach ($arrays as $array) {
            foreach ($array as $key => $value) {
                if ( ! array_key_exists($key, $result)) {
                    $result[$key] = [];
                }
    
                $result[$key] = array_merge($result[$key], $value);
            }
        }
    
        return $result;
    }
    

    The result is:

    enter image description here