我试图根据xmldata构建一个数组结构。我相信这个问题与我如何处理$finalData
有关。我最终想要一个包含三个记录数组的扁平数组,但我想我需要先正确解析XML数据,然后再展开数据数组。我想修复代码来解析XML数据,所以我最初的问题是如何修复这个代码来解析XML数据,但是接下来我要研究如何平铺最终的数据数组(我需要个人record
包含相关信息,我最终需要的结构。我想你可以说我试着去处理数据的用户导入,最终只检索包含数据的各个组件。PHP递归收集SimpleXMLElement数据并压扁数组数组
public function processXml($xmldata,$finalData=array())
{
$finalData = array();
if($xmldata instanceof SimpleXMLElement){
foreach($xmldata as $idata){
$this->processXml($idata,$finalData);
}
} else {
array_push($finalData,$xmldata);
}
return $finalData;
}
这里的XML数据(注意,我不知道用户将在他的XML数据中导入什么,这只是我创建的测试数据):
`<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<records>
<somekey>
<record>
<firstname>Jonathan</firstname>
<lastname>Kushner</lastname>
</record>
<record>
<firstname>Dustin</firstname>
<lastname>Kushner</lastname>
</record>
<record>
<firstname>Cameron</firstname>
<lastname>Kushner</lastname>
</record>
</somekey>
</records>
</configdata>`
注意:提供的答案使用xpath和domdocument。我试图学习递归和展平,所以虽然这是一个更好的方法,但我仍然想知道如何使用递归和展平来实现这一点。
请出示输入XML和结果数组你想(注:一个XML文档转换成一个阵列通常会导致数据的语义损失)。此外,可能的快速修复,你会希望通过引用传递'$ finalData',或者将递归调用的结果与它合并,尝试'public function processXml($ xmldata,&$ finalData = null){if(!isset $ finalData)){$ finalData = array(); }/*其余的方法代码* /}' – DaveRandom 2013-03-15 16:18:11
修复了这个问题。另外,我试过你的解决方案,它没有工作。 – jkushner 2013-03-15 16:34:48
那么你想从这个XML中得到什么?只是一个3个字符串的数组? – DaveRandom 2013-03-15 16:35:47