public static function arrayToXml(array $data, \SimpleXMLElement $xml, $parentKey = null, $keyFilterCallback = null) { foreach ($data as $k => $v) { if (!is_numeric($k) && is_callable($keyFilterCallback)) { $k = call_user_func($keyFilterCallback, $k); } if (is_array($v)) { if (!is_numeric($k)) { self::arrayToXml($v, $xml->addChild($k), $k, $keyFilterCallback); } else { self::arrayToXml($v, $xml->addChild(Inflector::singularize($parentKey)), null, $keyFilterCallback); } } else { if (!is_numeric($k)) { $xml->addChildWithCDATA($k, $v); } else { if (!is_null($parentKey)) { $xml->addChildWithCDATA(Inflector::singularize($parentKey), $v); } else { throw new \Exception("Array To xml forma error: invalid element name {$k}"); } } } } return $xml; }