我試圖根據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