我正在尝试将PHP数组转换为有效的XML。 我遇到的问题是数组有嵌套数组和整数键,我希望它们属于同一个XML标记。
使用我在stackoverflow上找到的array_to_xml函数帮助我进行转换,但是使用整数键将嵌套数组转换为无效和不需要的xml键,如< 0>< / 0 GT;
这里是示例代码:
$array = array(test1 => 1, test2 => 2, test3 => array("a", "b", "c"));
$xml = new SimpleXMLElement('<parameters></parameters>');
array_to_xml($array, $xml);
$result = $xml -> asXML("test.xml");
生成:
<?xml version="1.0"?>
<parameters>
<test1>1</test1>
<test2>2</test2>
<test3><0>a</0><1>b</1><2>c</2></test3>
</parameters>
但是,我需要它看起来像:
<?xml version="1.0"?>
<parameters>
<test1>1</test1>
<test2>2</test2>
<test3>a</test3>
<test3>b</test3>
<test3>c</test3>
</parameters>
有没有一种简单的方法来转换这样的PHP数组并生成上述XML结构?
P.S。:我使用以下array_to_xml函数:
function array_to_xml($array, &$xml) {
foreach($array as $key => $value) {
if(is_array($value)) {
if(!is_numeric($key)){
$subnode = $xml->addChild("$key");
array_to_xml($value, $subnode);
} else {
array_to_xml($value, $xml);
}
} else {
$xml->addChild("$key","$value");
}
}
}
答案 0 :(得分:1)
怎么样:
// http://stackoverflow.com/questions/173400/how-to-check-if-php-array-is-associative-or-sequential
function isAssoc(array $arr)
{
if (array() === $arr) return false;
return array_keys($arr) !== range(0, count($arr) - 1);
}
function array_to_xml($array, &$xml)
{
foreach($array as $key => $value)
{
if(is_array($value))
{
if(isAssoc($value))
{
$Parent = $xml->addChild($key);
foreach($value as $childKey => $childValue)
{
$Parent->addChild($childKey, $childValue);
}
}
else
{
foreach($value as $subvalue)
{
$xml->addChild("$key","$subvalue");
}
}
}
else
{
$xml->addChild("$key","$value");
}
}
}
...约翰