You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中XML转数组时空值被转为空数组,如何替换为空字符串?

解决方案

问题原因

使用json_encode((array) $xml)序列化SimpleXMLElement对象时,空XML节点会被识别为无元素的对象,反序列化为数组后就成为空数组,导致类型不符合入库要求。

修复方案

方案1:递归处理转换后的数组(适配多层嵌套XML)

先定义递归处理函数,将所有空数组统一转为空字符串:

function emptyArrayToEmptyString(array $array): array
{
    foreach ($array as $key => $value) {
        if (is_array($value) && empty($value)) {
            $array[$key] = '';
        } elseif (is_array($value)) {
            $array[$key] = emptyArrayToEmptyString($value);
        }
    }
    return $array;
}

在原有转换逻辑后调用函数即可:

$xml = file_get_contents('uploads/data.xml');
$xml = simplexml_load_string($xml);
$xml_array = json_decode(json_encode((array) $xml), 1);
// 执行转换
$data = emptyArrayToEmptyString($xml_array);

方案2:直接遍历SimpleXMLElement取值(适配单层XML,性能更高)

跳过json序列化/反序列化步骤,直接将XML节点强转为字符串,空节点会直接得到空字符串:

$xml = simplexml_load_file('uploads/data.xml');
$data = [];
foreach ($xml as $key => $value) {
    $data[$key] = (string)$value;
}

如果是多层嵌套XML,可将上述逻辑改为递归遍历即可。

内容的提问来源于stack exchange,提问作者amit sutar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:36:03