Php 使用SimpleXML将多维数组转换为XML

Php 使用SimpleXML将多维数组转换为XML,php,arrays,xml,simplexml,Php,Arrays,Xml,Simplexml,我正在尝试使用SimpleXML将多维数组转换为XML文件。 我遵循了这篇文章的说明:通过这些编辑:但我无法得到正确的结果 使用的数组: $array = array( 'name' => 'xxx', 'chapter' => array( array( 'title' => 'yyy', 'slide' => array( 'header' => array('zzz','aaa'),

我正在尝试使用SimpleXML将多维数组转换为XML文件。 我遵循了这篇文章的说明:通过这些编辑:但我无法得到正确的结果

使用的数组:

$array = 
array(
'name' => 'xxx',
'chapter' => array(
    array(
    'title' => 'yyy',
    'slide' => 
        array(
        'header' => array('zzz','aaa'),
        'paragraph' => array('bbb','ccc')
        ),
        array(
            'header' => array('ddd'),
            'paragraph' => array('eee')
        )
    ),
    array(
        'title' => 'fff',
        'slide' => array(
            'header' => array('ggg'),
            'paragraph' => array('hhh')
        )
    )
    )
);
首选(需要)XML输出:

我尝试使用不同的方法在正确的位置获得正确的节点,但它们似乎都失败了。我得到的最接近的结果是使用数组_键($values),但后来我得到了很多双节点,或者节点位于错误的位置

XMLresult立即:

$array=
排列(
“名称”=>“xxx”,
'章'=>数组(
排列(
'title'=>'yyy',
“幻灯片”=>
排列(
'header'=>数组('zzz','aaa'),
'段落'=>数组('bbb','ccc')
),
排列(
'header'=>数组('ddd'),
'段落'=>数组('eee')
)
),
排列(
“title”=>“fff”,
“幻灯片”=>阵列(
'header'=>数组('ggg'),
'段落'=>数组('hhh')
)
)
)
);
$xml=新的SimpleXMLElement(“”);
函数数组到xml($array,&$xml){
foreach($key=>$value的数组){
if(是_数组($value)){
如果(!是数字($key)){
$subnode=$xml->addChild($key”);
数组到xml($value,$subnode);
}
否则{
$subnode=$xml->addChild(“项$key”);
数组到xml($value,$subnode);
}
}
否则{
$xml->addChild($key),htmlspecialchars($value));
}
}
};
数组到xml($array,$xml);
$xml->asXML('file.xml');
file.xml
中的内容完全符合您的要求。

使用,您可以从PHP数组生成xml,然后将其导入SimpleXML

$data = [ 'doc' => [
              'fruit' => 'orange',
              'cake'  => [
                   '@id' => '123', 
                   '@'   => 'tiramisu' ],
              [ 'pasta' => 'matriciana' ],
              [ 'pasta' => 'boscaiola'  ]
] ];
就这样

$doc       = fluidxml($data);
$simplexml = simplexml_import_dom($doc->dom());

// Done. ;)

$doc       = fluidxml($data);
$simplexml = simplexml_import_dom($doc->dom());

// Done. ;)