public function testMergeRecursive() { $this->assertNull($this->stub->mergeRecursive(null, null)); $this->assertNull($this->stub->mergeRecursive(array(1), null)); $array1 = array(0 => "val1"); $array2 = array(1 => "val2"); $this->assertNotEmpty($this->stub->mergeRecursive($array1, $array2)); $this->assertEquals(array(0 => "val1", 1 => "val2"), $this->stub->mergeRecursive($array1, $array2)); $array1 = array(0 => "val1"); $array2 = array(1 => "val2", array(2 => "val3", array(3 => "val4"))); $resArray = array(0 => "val1", 1 => "val2", array(2 => "val3", array(3 => "val4"))); $this->assertEquals($resArray, $this->stub->mergeRecursive($array1, $array2)); }
function update($newValues = array(), $keepOld = true) { $newValues = array_map_recursive('stripslashes', $newValues); if ($keepOld) { $this->load(); $newValues = CMbArray::mergeRecursive($this->values, $newValues); } if (!count($newValues)) { if (is_file($this->targetPath)) { unlink($this->targetPath); } return; } $this->values = $newValues; // Throws many E_STRICT errors $config = @new Config(); @$config->parseConfig($this->values, $this->configType, $this->options); return @$config->writeConfig($this->targetPath, $this->configType, $this->options); }
/** * Merge recursively two array * * @param array $paArray1 First array * @param array $paArray2 The array to be merged * * @return array The merge result */ static function mergeRecursive($paArray1, $paArray2) { if (!is_array($paArray1) || !is_array($paArray2)) { return $paArray2; } foreach ($paArray2 as $sKey2 => $sValue2) { $paArray1[$sKey2] = CMbArray::mergeRecursive(@$paArray1[$sKey2], $sValue2); } return $paArray1; }