<?php
function mergeDeepArray(array $arrays, $preserve_integer_keys = FALSE) {
$result = [];
foreach ($arrays as $array) {
foreach ($array as $key => $value) {
// Renumber integer keys as array_merge_recursive() does unless
// $preserve_integer_keys is set to TRUE. Note that PHP automatically
// converts array keys that are integer strings (e.g., '1') to integers.
if (is_int($key) && !$preserve_integer_keys) {
$result[] = $value;
}
// Recurse when both values are arrays.
elseif (isset($result[$key]) && is_array($result[$key]) && is_array($value)) {
$result[$key] = mergeDeepArray([$result[$key], $value], $preserve_integer_keys);
}
// Otherwise, use the latter value, overriding any previous value.
else {
$result[$key] = $value;
}
}
}
return $result;
}
$a = [['foo' => [2,3]], ['foo' => [4, 5]]];
print_r(mergeDeepArray($a)['foo']);
$a = [['foo' => new ArrayObject([2,3])], ['foo' => new ArrayObject([4, 5])]];
print_r((array)mergeDeepArray($a)['foo']);
preferences:
68.36 ms | 402 KiB | 5 Q