將SimpleXML 物件轉換為陣列:一種更有效的方法
將SimpleXML 物件轉換為陣列對於操作XML 資料非常有用有效。然而,第一個問題中描述的方法涉及 JSON 的編碼和解碼,可能會很麻煩。這是實現相同目的的改進方法:
function xmlstring2array($string) {
$xml = simplexml_load_string($string); return xml2array($xml);
}
function xml2array($xmlObject) {
foreach ((array) $xmlObject as $index => $node) { if (is_object($node)) { $out[$index] = xml2array($node); } else { $out[$index] = $node; } } return $out;
}
這個修改後的函數xml2array() 遞歸地迭代SimpleXML 對象,將節點轉換為數組,同時保留其結構。它避免了 JSON 編碼和解碼的開銷,使其更有效率和強壯。
原始函數在將 XML 轉換為陣列時遺失了屬性。但是,您可以透過在xml2array() 迴圈中使用SimpleXML 的attribute() 方法來保留屬性:
foreach ((array) $xmlObject as $index => $node) {
... if (is_object($node)) { $out[$index] = xml2array($node); } else if ($node instanceof SimpleXMLElement) { $attrs = $node->attributes(); if (count($attrs) > 0) { $out[$index] = (array) $node; foreach ($attrs as $attrName => $attrValue) { $out[$index][$attrName] = (string) $attrValue; } } else { $out[$index] = (string) $node; } } ...
}
透過合併這些改進,您可以更有效地將SimpleXML 物件轉換為數組,同時保留結構和屬性。
以上是如何有效率地將 SimpleXML 物件轉換為陣列並保留屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!