将 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中文网其他相关文章!