具有XML的混合整数和字符串键的多维PHP数组

时间:2016-12-15 18:41:41

标签: php arrays xml multidimensional-array

我正在尝试将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");
        }
    }
}

1 个答案:

答案 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");
        }
    }
}

...约翰