在PHP中将数组转换为XML

时间:2015-01-20 09:38:38

标签: php arrays xml

我有这样的数组:

Array
(
    [0] => Array
        (
            [0] => BWY DL
            [1] => SP_GPON
        )

    [1] => Array
        (
            [0] => Memo
            [1] => Multispeed Network
        )

)

我希望用XML格式化它,XML格式如下:

<?xml version="1.0"?>
<data>
  <citem>BWY DL</citem> //index [0]
  <desc>Memo</desc>// index [0]
</data>
<data>
  <citem>SP_GPON</citem> //index [1]
  <desc>Multispeed Network</desc> // index[1]
</data>

我尝试使用此代码,但它没有给出正确的结果。这是代码:

function array_to_xml(array $values, SimpleXMLElement $xml)
{
    foreach($values as $row) {
        $data = $xml->addChild('data');
        $data->addChild('citem', $row[0]);
        $data->addChild('desc', $row[1]);
    }
    return $xml; 
}

并且上面代码的结果是这样的(错误的结果):

<?xml version="1.0"?>
<data>
   <citem>BWY DL</citem> 
   <desc>SP_GPON</desc>
</data>
<data>
   <citem>Memo</citem>
   <desc>Multispeed Network</desc>
</data>

1 个答案:

答案 0 :(得分:0)

你的数组的结构对我来说有点奇怪,所以让我们看看阵列布局上的调整是否是一个不错的解决方法。

foreach($values[0] as $key=>$value){
  $interlaced_values[]=array($value,$values[1][$key]);
}

$values=$interlaced_values;
unset($interlaced_values);

编辑:尝试澄清。

您的初始数组被拆分为两个子数组。一个用于名称,一个用于描述。我将它们网格化,以便每个名称 - 描述对都有1个子数组。

$values[0]只是您的“名称”子数组,$values[1]是您的描述子数组。

我只在名称上运行foreach(),但使用$key访问了匹配的说明。

如果你在新数组上使用print_r()var_export(),你会看到结果。

$interlaced_values本来是暂时的。我将它的最终值分配给$ values,因此其余代码可以不加改变地使用。然后我unset()临时变量来释放内存。