最常用且可靠的方式是使用 SimpleXML 配合 json_encode 和 json_decode 组合实现:先 simplexml_load_string 解析为对象,再 json_encode 转 JSON,最后 json_decode(..., true) 得关联数组,支持嵌套、属性和同名节点,PHP 5.2+ 原生可用。

PHP 将 XML 转换为数组,最常用且可靠的方式是使用 SimpleXML 配合 json_encode 和 json_decode 组合实现,兼顾可读性、兼容性和对嵌套结构的支持。原生不支持直接转数组,但这个方法稳定、无需额外扩展(PHP 5.2+ 默认启用)。
使用 simplexml_load_string + json_encode/decode(推荐)
这是目前最通用、处理属性、文本内容和嵌套节点都较稳妥的方法:
- 先用
simplexml_load_string()解析 XML 字符串为 SimpleXMLElement 对象 - 再用
json_encode()转成 JSON 字符串(SimpleXMLElement 可被 JSON 编码) - 最后用
json_decode(..., true)转为关联数组
示例:
$xmlStr = ''; $obj = simplexml_load_string($xmlStr); $array = json_decode(json_encode($obj), true); // 结果:['name' => '张三', 'age' => '28', 'hobbies' => ['hobby' => ['读书', '游泳']]] 张三 28 读书 游泳
⚠ 注意:同名子节点(如多个
立即学习“PHP免费学习笔记(深入)”;
PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书
处理 XML 属性和文本混合的场景
SimpleXML 默认把属性映射为对象属性,文本内容作为值。转换后属性会出现在 @attributes 键下(需手动干预或用自定义函数):
$xmlStr = '- PHP入门
'; $obj = simplexml_load_string($xmlStr); $array = json_decode(json_encode($obj), true); // 得到:['@attributes' => ['id' => '100', 'type' => 'book'], 0 => 'PHP入门'] // 若想合并或重命名,建议后续用 array_merge 或封装辅助函数
轻量替代方案:递归遍历 SimpleXMLElement(适合定制化需求)
当需要精确控制键名、过滤空节点、扁平化结构或保留注释时,可手写递归函数:
- 检查节点是否有子元素:
$node->children() - 检查是否有属性:
$node->attributes() - 获取文本内容:
trim((string)$node)(注意强制转 string) - 对每个子节点递归调用,组合为数组
优点是完全可控,缺点是代码稍长,需自行处理边界(如纯文本节点、命名空间等)。
不推荐的方式说明
DOMDocument + getElementsByTagName:适合提取特定标签,不适合整树转数组;xml_parse_into_struct:已废弃(PHP 8.0 移除),且结构复杂难维护;第三方库(如 spatie/array-xml):功能强但引入依赖,小项目没必要。










