Это зависит от того, что вы хотите.Ключевое отличие, которое следует отметить, заключается в том, что CMap перезапишет существующие ключи, что отличается от встроенных функций php:
Если в каждом массиве есть элемент с одинаковым значением строкового ключа, последний перезапишетпрежний (отличается от array_merge_recursive)
Если вы выполните CMap :: mergeWith, как описано выше, вы просто получите новый массив, состоящий из 3-х массивов в качестве подэлементов:
Например,с учетом следующей структуры:
$foo = array (
'a' => 1,
'b' => 2,
'c' => 3,
'z' => 'does not exist in other arrays',
);
$bar = array (
'a' => 'one',
'b' => 'two',
'c' => 'three',
);
$arr = array (
'a' => 'uno',
'b' => 'dos',
'c' => 'tres',
);
Использование CMap :: mergeWith следующим образом:
$map = new CMap();
$map->mergeWith (array($foo, $bar, $arr));
print_r($map);
Результат в следующем:
CMap Object
(
[_d:CMap:private] => Array
(
[0] => Array
(
[a] => 1
[b] => 2
[c] => 3
[z] => does not exist in other arrays
)
[1] => Array
(
[a] => one
[b] => two
[c] => three
)
[2] => Array
(
[a] => uno
[b] => dos
[c] => tres
)
)
[_r:CMap:private] =>
[_e:CComponent:private] =>
[_m:CComponent:private] =>
)
Если перезаписать элементыпредпочтительное поведение, тогда будет работать следующее:
$map = new CMap ($foo);
$map->mergeWith ($bar);
$map->mergeWith ($arr);
print_r($map);
Что приводит к:
CMap Object
(
[_d:CMap:private] => Array
(
[a] => uno
[b] => dos
[c] => tres
[z] => does not exist in other arrays
)
[_r:CMap:private] =>
[_e:CComponent:private] =>
[_m:CComponent:private] =>
)
Если, однако, вы хотите добавить данные, то:
$map = new CMap (array_merge_recursive ($foo, $bar, $arr));
print_r($map);
доставит вас туда:
CMap Object
(
[_d:CMap:private] => Array
(
[a] => Array
(
[0] => 1
[1] => one
[2] => uno
)
[b] => Array
(
[0] => 2
[1] => two
[2] => dos
)
[c] => Array
(
[0] => 3
[1] => three
[2] => tres
)
[z] => does not exist in other arrays
)
[_r:CMap:private] =>
[_e:CComponent:private] =>
[_m:CComponent:private] =>
)