Я бы прокомментировал второй наиболее проголосовавший ответ, потому что он не сохраняет структуру и генерирует плохой xml, если есть числовые индексированные внутренние массивы.
Я разработал свою собственную версию на основе этого, потому что мне нужен простой конвертер между json и xml независимо от структуры данных. Моя версия сохраняет информацию о числовом ключе и структуру исходного массива. Он создает элементы для числовых индексированных значений путем переноса значений в элементы с именем, обозначаемыми именем, с ключевым атрибутом, который содержит числовой ключ.
Например
array('test' => array(0 => 'some value', 1 => 'other'))
преобразуется в
<test><value key="0">some value</value><value key="1">other</value></test>
Моя версия array_to_xml -функции (надеюсь, что это кому-то помогает:)
function array_to_xml($arr, &$xml) {
foreach($arr as $key => $value) {
if(is_array($value)) {
if(!is_numeric($key)){
$subnode = $xml->addChild("$key");
} else {
$subnode = $xml->addChild("value");
$subnode->addAttribute('key', $key);
}
array_to_xml($value, $subnode);
}
else {
if (is_numeric($key)) {
$xml->addChild("value", $value)->addAttribute('key', $key);
} else {
$xml->addChild("$key",$value);
}
}
}
}