首頁 >後端開發 >php教程 >如何有效率地將 SimpleXML 物件轉換為陣列並保留屬性?

如何有效率地將 SimpleXML 物件轉換為陣列並保留屬性?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-27 08:11:02324瀏覽

How to Convert a SimpleXML Object to an Array Efficiently and Preserve Attributes?

將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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn