使用SimpleXMLElement递归处理数组,将键值转为XML标签,数字键统一为item标签,htmlspecialchars防止特殊字符破坏结构,最终生成标准XML。

PHP将数组转换为XML的方法主要通过递归遍历数组,并使用PHP内置的SimpleXMLElement类来构建XML结构。这种方法适用于关联数组或多重嵌套数组,能灵活生成标准格式的XML数据。
使用SimpleXMLElement递归生成XML
这是最常用且高效的方式。通过创建一个空的SimpleXMLElement对象,然后递归地添加数组中的键和值。
示例代码:
function arrayToXml($array, &$xml) {
foreach ($array as $key => $value) {
if (is_array($value)) {
$subnode = $xml->addChild("$key");
arrayToXml($value, $subnode);
} else {
$xml->addChild("$key", htmlspecialchars("$value"));
}
}
}
// 使用示例
$data = [
'name' => '张三',
'age' => 25,
'address' => [
'city' => '北京',
'zip' => '100001'
]
];
$xml = new SimpleXMLElement(' ');
arrayToXml($data, $xml);
echo $xml->asXML();
输出结果为:
立即学习“PHP免费学习笔记(深入)”;
处理索引数组(数字键)
当数组包含数字键时,直接使用键名可能不符合XML命名规范。建议为这些元素设置统一标签名,如
改进示例:
function arrayToXml($array, &$xml) {
foreach ($array as $key => $value) {
if (is_numeric($key)) {
$key = 'item'; // 数字键统一用 item 标签
}
if (is_array($value)) {
$subnode = $xml->addChild($key);
arrayToXml($value, $subnode);
} else {
$xml->addChild($key, htmlspecialchars("$value"));
}
}
}
这样可以避免生成类似...的非法标签(虽然XML允许,但不利于解析)。
直接返回XML字符串
封装成独立函数,便于调用:
function convertArrayToXml($array) {
$xml = new SimpleXMLElement(' ');
arrayToXml($array, $xml);
return $xml->asXML();
}
调用convertArrayToXml($data)即可获得完整XML字符串。
基本上就这些。注意使用htmlspecialchars防止特殊字符破坏XML结构,同时确保数组中不含对象或其他不可遍历类型。











