如何使用整数索引将Array转换为XML到超级节点

时间:2017-12-26 06:20:16

标签: php xml

我有一个如下数组:

...
array('info' => array(
                    array(
                        'key' => $key1, 
                        'value' => $value1
                      ), 
                    array(
                        'key' => $key2, 
                        'value' => $value2
                     )
                 )
     );
...

我有如下的XML转换功能:

...
public function createXML($array, $xml = false)
{

    if($xml === false){
        $xml = new SimpleXMLElement('<info/>');
    }

    foreach($array as $key => $value){
        if(is_array($value)){
            $this->createXML($value, $xml->addChild($key));
        } else {
            $xml->addChild($key, $value);
        }
    }

    return $xml->asXML();
}
...

我正在使用XML:

<Info>
    <0>
        <Key>$key1</Key>
        <Value>$value1</Value>
    </0>
    <1>
        <Key>$key2</Key>
        <Value>$value2</Value>
    </1>
</Info>

但我希望以下面的格式获取XML:

...
    <Info>
        <Key>$key1</Key>
        <Value>$value1</Value>
    </Info>
    <Info>
        <Key>$key2</Key>
        <Value>$value2</Value>
    </Info>
...

如何更新createXML函数以便获得上述XML格式?

1 个答案:

答案 0 :(得分:0)

问题在于......

if(is_array($value)){
    $this->createXML($value, $xml->addChild($key));
} else {

当你知道$value是一个数组时,你这样做了。这意味着您将在一个<info>标记下添加所有数据(在您的情况下为2个元素)。由于您没有这两个值的元素名称,因此它将使用您获得的数值。

如果你一次传递一个,你可以在他们自己的元素下添加它们......

if(is_array($value)){
    foreach($value as $value2){
        $this->createXML($value2, $xml->addChild($key));
    }
} else {