Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Merge array with common value

I have two arrays namely arr and arr2.

var arr=[{"month":"January","url":1},{"month":"February","url":102},{"month":"March","url":192}];

var arr2=[{"month":"January","ip":12},{"month":"June","ip":10}];

Is it possible to get array below shown from above two arrays?

result=[{"month":"January","url":1,"ip":12},{"month":"February","url":102},{"month":"March","url":192},{"month":"June","ip":10}];

If i use array_merge then i get answer as

result=[{"month":"January","url":1},{"month":"February","url":102},{"month":"March","url":192},{"month":"January","ip":12},{"month":"June","ip":10}];
like image 455
DPS Avatar asked Apr 16 '26 17:04

DPS


1 Answers

The first function that comes to mind is array_merge_recursive(), but even if you assign temporary associative keys to the subarrays, you end up with multiple January values in a new deep subarray.

But do not despair, there is another recursive function that can do this job. array_replace_recursive() will successfully merge these multidimensional arrays so long as temporary associative keys are assigned first.

Here is a one-liner that doesn't use foreach() loops or if statements:

Code: (Demo)

$arr=json_decode('[{"month":"January","url":1},{"month":"February","url":102},{"month":"March","url":192}]',true);
$arr2=json_decode('[{"month":"January","ip":12},{"month":"June","ip":10}]',true);
echo json_encode(array_values(array_replace_recursive(array_column($arr,NULL,'month'),array_column($arr2,NULL,'month'))));

Output:

[{"month":"January","url":1,"ip":12},{"month":"February","url":102},{"month":"March","url":192},{"month":"June","ip":10}]

The breakdown:

echo json_encode(  // convert back to json
         array_values(  // remove the temp keys (reindex)
             array_replace_recursive(  // effectively merge/replace elements associatively
                 array_column($arr,NULL,'month'),  // use month as temp keys for each subarray
                 array_column($arr2,NULL,'month')  // use month as temp keys for each subarray
             )
         )
     );
like image 137
mickmackusa Avatar answered Apr 18 '26 07:04

mickmackusa



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!