PHP में दो arrays को merge करने के दो तरीके: array_merge() और + (union) operator। दोनों का व्यवहार अलग है।
Array Union Operator (+)
First array के keys को priority देता है। Duplicate keys पर first array का value रखता है।
<?php
$arr1 = ['p' => 150, 'q' => 100, 'r' => 120];
$arr2 = ['t' => 115, 'q' => 999, 'u' => 103]; // 'q' duplicate
$result = $arr1 + $arr2;
print_r($result);
/*
Array
(
[p] => 150 // from arr1
[q] => 100 // from arr1 (first wins!)
[r] => 120 // from arr1
[t] => 115 // from arr2
[u] => 103 // from arr2
)
*/
// Note: arr2 का 'q' => 999 ignored हुआ
array_merge()
Later arrays के values से overwrite करता है। Numeric keys re-index होते हैं।
<?php
$arr1 = ['p' => 150, 'q' => 100, 'r' => 120];
$arr2 = ['t' => 115, 'q' => 999, 'u' => 103];
$result = array_merge($arr1, $arr2);
print_r($result);
/*
Array
(
[p] => 150
[q] => 999 // arr2 से overwrite हुआ!
[r] => 120
[t] => 115
[u] => 103
)
*/
Numeric Keys के साथ व्यवहार
<?php
$arr1 = [0 => 'a', 1 => 'b'];
$arr2 = [0 => 'c', 1 => 'd'];
// Union (+) - keys preserve करता है
var_dump($arr1 + $arr2);
// array(2) { [0]=>'a' [1]=>'b' } - arr2 ignored!
// array_merge() - re-index करता है
var_dump(array_merge($arr1, $arr2));
// array(4) { [0]=>'a' [1]=>'b' [2]=>'c' [3]=>'d' }
तुलना तालिका
| विशेषता | array_merge() | + Union |
|---|---|---|
| String keys collision | Later wins (overwrites) | First wins (preserves) |
| Numeric keys | Re-indexed (0, 1, 2...) | Preserved (collision = first wins) |
| Performance | Slightly slower | Faster |
| Return type | New array | New array |
| Null handling | Null values kept | Null values kept |
व्यावहारिक उदाहरण
<?php
// Config merging: defaults + user config
$defaults = [
'host' => 'localhost',
'port' => 3306,
'debug' => false,
'timeout' => 30
];
$userConfig = [
'host' => 'db.example.com',
'debug' => true
];
// Option 1: User config overrides defaults (array_merge)
$config = array_merge($defaults, $userConfig);
// Result: host=db.example.com, debug=true, port=3306, timeout=30
// Option 2: Defaults preserve, only add missing (union)
$config = $userConfig + $defaults;
// Result: host=db.example.com, debug=true, port=3306, timeout=30
// Same in this case because no numeric keys
// Multiple arrays merge
$config = array_merge($defaults, $envConfig, $userConfig, $runtimeConfig);
// Last one wins for duplicates
Recursive Merge (Deep Merge)
<?php
function arrayMergeRecursive(array ...$arrays): array {
$result = [];
foreach ($arrays as $array) {
foreach ($array as $key => $value) {
if (isset($result[$key]) && is_array($result[$key]) && is_array($value)) {
$result[$key] = arrayMergeRecursive($result[$key], $value);
} else {
$result[$key] = $value;
}
}
}
return $result;
}
// या PHP 8.0+ में
$result = array_merge_recursive(...$arrays); // लेकिन यह numeric keys duplicate करता है!
सिफारिश
- Configuration merging:
array_merge()(user overrides defaults) - Preserving original keys:
+operator Numeric indexed arrays combine: array_merge()(re-indexing wanted)Associative arrays combine (no overwrite): +operator