/** * @param array $configs * * @return array */ protected function processConfiguration(array $configs) { $config = []; foreach ($configs as $group) { $config = array_extend_distinct($config, $group); } return $config; }
/** * Extend one array with another. Non associative arrays will not be merged * but rather replaced. * * @param array $arrays * * @return array */ function array_extend_distinct(array $arrays) { $merged = []; foreach (func_get_args() as $array) { foreach ($array as $key => $value) { if (is_array($value) && array_has($merged, $key) && is_array($merged[$key])) { if (array_is_associative($value) && array_is_associative($merged[$key])) { $merged[$key] = array_extend_distinct($merged[$key], $value); continue; } } $merged[$key] = $value; } } return $merged; }
/** * @dataProvider array_extend_distinct_provider */ public function test_array_extend_distinct($expected, $array1, $array2) { $this->assertEquals($expected, array_extend_distinct($array1, $array2)); }
/** * @param array $config * * @return IConfig */ public function merge(array $config) { $this->setConfig(array_extend_distinct($this->getConfig(), $config)); return $this; }