Values from later array overwrite the previous array.
X::mergeArrays([1, 'Test'], [2, 'Example']);
// array [1, 'Test', 2, 'Example']
$arr1 = ['a' => 1, 'b' => 2];
$arr2 = ['b' => 3, 'c' => 4, 'd' => 5];
$arr3 = ['e' => 6, 'b' => 33];
X::mergeArrays($arr1, $arr2, $arr3)
// (array) ['a' => 1, 'b' => 33, 'c' => 4, 'd' => 5, 'e' => 6]
function(array $a1, array $a2)
{
$args = \func_get_args();
if (\count($args) > 2) {
for ($i = \count($args) - 1; $i > 1; $i--) {
if (!is_array($args[$i])) {
throw new Exception('The provided argument must be an array, ' . gettype($args[$i]) . ' given.' );
}
$args[$i - 1] = self::mergeArrays($args[$i - 1], $args[$i]);
}
$a2 = $args[1];
}
if ((self::isAssoc($a1) || empty($a1)) && (self::isAssoc($a2) || empty($a2))) {
$keys = array_unique(array_merge(array_keys($a1), array_keys($a2)));
$r = [];
foreach ($keys as $k) {
if (!array_key_exists($k, $a1) && !array_key_exists($k, $a2)) {
continue;
}
elseif (!array_key_exists($k, $a2)) {
$r[$k] = $a1[$k];
}
elseif (!array_key_exists($k, $a1) || !\is_array($a2[$k]) || !\is_array($a1[$k]) || is_numeric(key($a2[$k]))) {
$r[$k] = $a2[$k];
}
else{
$r[$k] = self::mergeArrays($a1[$k], $a2[$k]);
}
}
}
else{
$r = array_merge($a1, $a2);
}
return $r;
}