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
相关产品推荐
相关产品推荐

