Search code examples
phpmergeassociative-arraytranspose

Transpose 2 associative arrays of unequal size to form an associative 2d array


Example:

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3", 'z' => "4");
$arr2 = array('a' => "9", 'b' => "8", 'c' => "7", 'd' => "6", 'e' => "5");

Output:

$result = array(
    'a' => array( 'f1' => "1", 'f2' => "9"),
    'b' => array( 'f1' => "2", 'f2' => "8"),
    'c' => array( 'f1' => "3", 'f2' => "7"),
    'd' => array( 'f1' => "0", 'f2' => "6"),
    'e' => array( 'f1' => "0", 'f2' => "5"),
    'z' => array( 'f1' => "4", 'f2' => "0"),
);

The size of $arr1 can be '>', '<' or '=' size of $arr2


Solution

  • I think this it,

    $arr1 = array('a' => "1", 'b' => "2", 'c' => "3", 'z' => "4");
    
    $arr2 = array('a' => "9", 'b' => "8", 'c' => "7", 'd' => "6", 'e' => "5");
    
    
    foreach($arr1 as $key => $value){
        $a[$key]['f1'] = $value;
    }
    
    foreach($arr2 as $key => $value){
        $b[$key]['f2'] = $value;
    }
    
    $c = array_merge_recursive($a, $b);
    foreach($c as $key => $value){
        $result[$key]['f1'] = (array_key_exists('f1', $value)) ? $value['f1']: 0;
        $result[$key]['f2'] = (array_key_exists('f2', $value)) ? $value['f2']: 0;
    }
    
    echo "<pre>".print_r ($result, true);
    

    the output:

    Array
    (
        [a] => Array
            (
                [f1] => 1
                [f2] => 9
            )
    
        [b] => Array
            (
                [f1] => 2
                [f2] => 8
            )
    
        [c] => Array
            (
                [f1] => 3
                [f2] => 7
            )
    
        [z] => Array
            (
                [f1] => 4
                [f2] => 0
            )
    
        [d] => Array
            (
                [f1] => 0
                [f2] => 6
            )
    
        [e] => Array
            (
                [f1] => 0
                [f2] => 5
            )
    
    )