function xml2array(string $contents, int $get_attributes = 1, string $priority = 'tag'): array
$contents:XML 字串。$get_attributes:1=解析屬性,0=忽略。$priority:'tag' 標籤優先(預設),'attribute' 屬性優先,影響回傳陣列結構。xml_parser_create(),設定 UTF-8、不摺疊大小寫、略過空白。xml_parse_into_struct() 將 XML 扁平化為結構陣列(含 tag、type、level、attributes、value)。$parents 記錄父層引用,$opened_tags 追蹤開啟標籤,$repeated_tag_index 處理同名標籤轉陣列。$priority 決定值與屬性在結果陣列中的位置。$xml = file_get_contents('tools.xml');
$arr = xml2array($xml, 1, 'attribute');
print_r($arr);
['book'] => [
['title' => '...', 'author' => '...', '_attr' => ['id' => '1']],
['title' => '...', ...]
]
['book'] => [
['attr' => ['id' => '1'], 'value' => ['title' => '...', 'author' => '...']],
...
]
xml 擴展(PHP 核心內建)。XMLReader 邊讀邊轉。value 中。ns:tag)。function simplexmlToArray(SimpleXMLElement $xml) {
$arr = [];
foreach ($xml as $key => $val) {
$arr[$key][] = $val->count() ? simplexmlToArray($val) : (string)$val;
}
// 屬性
foreach ($xml->attributes() as $k => $v) $arr['@attributes'][$k] = (string)$v;
return $arr;
}
$xml = simplexml_load_string($xmlStr);
$arr = simplexmlToArray($xml);
xml2array() 展示了 SAX 事件驅動解析重建 DOM 樹的經典演算法,適合學習 XML 處理原理。生產環境優先使用 SimpleXML 或成熟庫(如 spatie/xml-to-array)。