$value) { if (array_key_exists($key, $new)) { if ($value === $new[$key]) { $unchangedKeys[] = $key; } } else { $new[$key] = null; } } foreach ($unchangedKeys as $key) { unset($new[$key]); } return $new; } protected static function flattenProperty(array &$properties, $property) { // TODO: dots in varnames -> throw or escape? if (isset($properties[$property])) { foreach ((array) $properties[$property] as $key => $value) { $properties["$property.$key"] = $value; } unset($properties[$property]); } } }