将xml转换为数组,不需要的数组输出

时间:2011-06-21 17:25:30

标签: php arrays simplexml

我正在尝试将xml转换为关联数组。

  foreach($xml->children() as $child)
  {
  $ages[$child->getName()] = $child;
  }

但是当我打印出这个数组'age'时,我得到的输出为

[Quagmire] => SimpleXMLElement Object
        (
            [0] => 30
        )

而不是

[Quagmire] => 30 

我可以做出哪些改变来获得所需的输出?

2 个答案:

答案 0 :(得分:1)

您可以将子项的值从SimpleXML对象显式转换为int。

    $ages[$child->getName()] = (int)$child;

答案 1 :(得分:-2)

是的,SimpleXML Objects的问题在于它们并非完全是对象。它们实际上是资源。这就是你遇到这个问题的原因。几年前,当我尝试序列化XML对象供以后使用时,我遇到了这个问题。

您需要做的是编写一个可以进行转换的函数。现在通常我会写一个,但事实证明,PHP社区中的许多人已经解决了这个问题并将其发布在php.net网站上。

以下代码来自http://www.php.net/manual/en/book.simplexml.php#97555

<?php
function objectsIntoArray($arrObjData, $arrSkipIndices = array())
{
  $arrData = array();

  // if input is object, convert into array
  if (is_object($arrObjData))
    $arrObjData = get_object_vars($arrObjData);

  if (is_array($arrObjData))
  {
    foreach ($arrObjData as $index => $value)
    {
      if (is_object($value) || is_array($value))
        $value = objectsIntoArray($value, $arrSkipIndices); // recursive call

      if (in_array($index, $arrSkipIndices))
        continue;

      $arrData[$index] = $value;
    }
  }

  return $arrData;
}
?>

Usage:

<?php
$xmlUrl = "feed.xml"; // XML feed file/URL
$xmlStr = file_get_contents($xmlUrl);
$xmlObj = simplexml_load_string($xmlStr);
$arrXml = objectsIntoArray($xmlObj);
print_r($arrXml);
?>

上面的代码被我略微清理了一下。我对丑陋的代码感到恼火。无论如何,给它一个裂缝和好运!

-Patrick