Если массивы ассоциативны по месяцу, вы можете использовать array_replace.
Сначала сделайте массивы ассоциативными с array_column, затем замените $ arr1 значениями $ arr2.
$arr1 = [
['month' => 1],
['month' => 2],
['month' => 3],
['month' => 4]
];
$arr2 = [
['month' => 3, 'info' => 'Alpha'],
['month' => 4, 'info' => 'Beta'],
['month' => 1, 'info' => 'Gamma'],
];
$arr1 = array_column($arr1, null, 'month');
$arr2 = array_column($arr2, null, 'month');
$result = array_replace($arr1, $arr2);
var_dump($result);
Возвращает:
array(4) {
[1]=>
array(2) {
["month"]=>
int(1)
["info"]=>
string(5) "Gamma"
}
[2]=>
array(1) {
["month"]=>
int(2)
}
[3]=>
array(2) {
["month"]=>
int(3)
["info"]=>
string(5) "Alpha"
}
[4]=>
array(2) {
["month"]=>
int(4)
["info"]=>
string(4) "Beta"
}
}
https://3v4l.org/tpshB
Если у вас более старая версия PHP, в которой нет array_column, вы можете использовать этот устаревший код из руководства
if (!function_exists('array_column')) {
function array_column($array, $columnKey, $indexKey = null)
{
$result = array();
foreach ($array as $subArray) {
if (is_null($indexKey) && array_key_exists($columnKey, $subArray)) {
$result[] = is_object($subArray)?$subArray->$columnKey: $subArray[$columnKey];
} elseif (array_key_exists($indexKey, $subArray)) {
if (is_null($columnKey)) {
$index = is_object($subArray)?$subArray->$indexKey: $subArray[$indexKey];
$result[$index] = $subArray;
} elseif (array_key_exists($columnKey, $subArray)) {
$index = is_object($subArray)?$subArray->$indexKey: $subArray[$indexKey];
$result[$index] = is_object($subArray)?$subArray->$columnKey: $subArray[$columnKey];
}
}
}
return $result;
}
}