我正在尝试将xml转换为关联数组。
foreach($xml->children() as $child)
{
$ages[$child->getName()] = $child;
}
但是当我打印出这个数组'age'时,我得到的输出为
[Quagmire] => SimpleXMLElement Object
(
[0] => 30
)
而不是
[Quagmire] => 30
我可以做出哪些改变来获得所需的输出?
答案 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