<?php
$array1= [
[
"month1" => "January",
"2020cs" => 84,
"2020as" => 500,
"2019cs" => 17,
"2019as" => 500,
],
[
"month1" => "February",
"2020cs" => 54,
"2020as" => 200,
"2019cs" => 12,
"2019as" => 1000,
],
[
"month1" => "April",
"2020cs" => 4,
"2020as" => 100,
"2019cs" => 12,
"2019as" => 1400,
],
[
"month1" => "November",
"2020cs" => 0,
"2020as" => 0,
"2019cs" => 7,
"2019as" => 200,
],
];
$array2= [
[
"month1" => "January",
"2020cr" => 13,
"2020ar" => 300,
"2019cr" => 0,
"2019ar" => 0,
],
[
"month1" => "March",
"2020cr" => 1,
"2020ar" => 100,
"2019cr" => 0,
"2019ar" => 0,
],
[
"month1" => "November",
"2020cr" => 0,
"2020ar" => 0,
"2019cr" => 1,
"2019ar" => 800,
],
[
"month1" => "December",
"2020cr" => 0,
"2020ar" => 0,
"2019cr" => 2,
"2019ar" => 500,
],
];
// top-level array from indexed to associative (name of month)
$array1 = rekey($array1);
$array2 = rekey($array2);
function rekey(array $arr = []): array
{
foreach ($arr as $key => $record) {
$arr[$record['month1']] = $arr[$key]; // indexed to name of month
unset($arr[$key]);
}
return $arr;
}
// run the merge
$result = array_merge_recursive($array1, $array2);
// clean up double entries key 'month1'
foreach($result as $key => &$value) {
if(is_array($value['month1'])) $value['month1'] = $value['month1'][0];
}
// sort result set
$months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
foreach($result as $key0 => $value0) {
foreach($months as $key1 => $value1) {
if($key0 === $value1) {
$result[$key1] = $result[$key0]; // set index based on month 0-11
unset($result[$key0]);
}
}
}
ksort($result);
print_r(array_values($result));
preferences:
30.06 ms | 407 KiB | 5 Q