How to merge multidimensional arrays while preserving keys?
Asked Answered
U

1

13

Is there a way for these arrays

$array1 = array(
    '21-24' => array(
        '1' => array("...")
    )
);

$array2 = array(
    '21-24' => array(
        '7' => array("..."),
    )
);

$array3 = array(
    '25 and over' => array(
        '1' => array("...")
    )
);

$array4 = array(
    '25 and over' => array(
        '7' => array("...")
    )
);

to be merged which result into the array below?

array(
    '21-24' => array(
        '1' => array("..."),
        '7' => array("...")
    ),      
    '25 and over' => array(
        '1' => array("..."),
        '7' => array("...")
    )
);

NOTE:

  • I don't have control over the array structure so any solution that requires changing the structure is not what I am looking for
  • I am mainly interested in preserving the keys of the first 2 levels but a more robust solution is one that can handle all level.

I tried using array_merge_recursive() like this

$x = array_merge_recursive($array1, $array2);
$x = array_merge_recursive($x, $array3);
$x = array_merge_recursive($x, $array4);

but it resulted in

 array(
    '21-24' => array(
        '1' => array("..."),
        '2' => array("...")
    ),      
    '25 and over' => array(
        '1' => array("..."),
        '2' => array("...")
    )
);
Unbidden answered 28/5, 2013 at 13:12 Comment(3)
Do you have only 4 arrays ?Olpe
@tessmore It is already in the question explaining that I tried it but did not work as expectedUnbidden
@HamZaDzCyberDeV Actual code I am working on varies. But what is constant is the first and second level keys. Of course, the best solution shouldn't care about that at all.Unbidden
C
43

Have you considered array_replace_recursive()?

print_r(array_replace_recursive($array1, $array2, $array3, $array4));
Cardinal answered 28/5, 2013 at 13:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.