private function mergeRecursive($array1, $array2)
{
$result = [];
foreach (array_merge(array_keys($array1), array_keys($array2)) as $key) {
if (!isset($array1[$key])) {
$result[$key] = $array2[$key];
} elseif (!isset($array2[$key])) {
$result[$key] = $array1[$key];
} elseif (is_array($array1[$key]) || is_array($array2[$key])) {
if (!is_array($array1[$key]) || !is_array($array2[$key])) {
throw new \Exception('Cannot merge a scalar with an array');
}
$result[$key] = $this->mergeRecursive($array1[$key], $array2[$key]);
} else {
$result[$key] = $array2[$key];
}
}
return $result;
}