/** * Override the values from one array with values from another array * * @param array $arr1 Base config * @param array $arr2 Overriding config * @return array */ function config_override(array $arr1, array $arr2) { foreach ($arr2 as $key => $value) { if (array_key_exists($key, $arr1) and is_array($value) and !array_key_exists(0, $value)) { $arr1[$key] = config_override($arr1[$key], $arr2[$key]); } else { $arr1[$key] = $value; } } return $arr1; }
public function testOverrideArrayValues() { $defaultConfig = array('one' => 'hello world', 'two' => array('twoA' => array('one', 'two', 'three'), 'other' => 'value')); $configOverride = array('one' => 'foo bar', 'two' => array('twoA' => array('four', 'five', 'six'))); $expected = array('one' => 'foo bar', 'two' => array('twoA' => array('four', 'five', 'six'), 'other' => 'value')); $this->assertEquals($expected, config_override($defaultConfig, $configOverride)); }