PHP
Merge Associative Arrays with Value Preference
Learn to merge two associative arrays in PHP, giving precedence to values from one array over another, useful for configuration overrides or default settings.
<?php
$defaultSettings = [
'theme' => 'light',
'notifications' => true,
'language' => 'en',
'pagination' => ['limit' => 10, 'order' => 'asc']
];
$userSettings = [
'theme' => 'dark',
'language' => 'fr',
'pagination' => ['limit' => 20] // Only overrides specific keys
];
// Simple merge: userSettings will overwrite defaultSettings for common keys.
// However, if pagination was not an array, this would work better.
// For nested arrays, array_merge is NOT recursive.
$mergedSimple = array_merge($defaultSettings, $userSettings);
echo "Simple Merge (shallow):
";
print_r($mergedSimple);
// Using array_replace_recursive for deep merge (PHP 5 >= 5.3.0)
$mergedDeep = array_replace_recursive($defaultSettings, $userSettings);
echo "
Deep Merge (recursive):
";
print_r($mergedDeep);
// Custom deep merge (if array_replace_recursive is not sufficient or unavailable)
function deepMerge(array $array1, array $array2): array
{
$merged = $array1;
foreach ($array2 as $key => $value) {
if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
$merged[$key] = deepMerge($merged[$key], $value);
} else {
$merged[$key] = $value;
}
}
return $merged;
}
$mergedCustom = deepMerge($defaultSettings, $userSettings);
echo "
Custom Deep Merge:
";
print_r($mergedCustom);
?>
How it works: This snippet demonstrates various ways to merge associative arrays, specifically when one array's values should take precedence. `array_merge` provides a shallow merge, overwriting top-level keys. For nested arrays, `array_replace_recursive` (PHP 5.3+) offers a recursive merge. A custom `deepMerge` function is also provided for finer control or environments where built-in recursive functions might not be desired, ensuring nested array values are combined correctly.