在将 xml 转换为 php 数组时,空 xml 字段产生一个空数组而不是空字符串

Posted

技术标签:

【中文标题】在将 xml 转换为 php 数组时,空 xml 字段产生一个空数组而不是空字符串【英文标题】:On converting xml to php array empty xml fields producing an empty array rather than empty string 【发布时间】:2014-10-21 09:34:35 【问题描述】:

我正在使用一段不错的短代码将我的 xml 字符串转换为 php 数组

$products = json_decode(json_encode(simplexml_load_string($products_xml)),TRUE);

一切正常,除了当我得到一个空数组而不是字符串时 xml 字段为空 - 当写入我的 SQL 数据库时,我看到字符串“数组”而不是一个空字段。

有没有用 php 做到这一点的好方法?


与此同时,我设法用这段代码解决了这个问题:

$products = json_decode(str_replace('', '""', json_encode(simplexml_load_string($products_xml))),TRUE);

【问题讨论】:

为什么要将整个对象转换成一个数组,而不是使用the many useful features of SimpleXML从中提取你想要的信息? 另外,为什么只有一个 empty 数组会导致单词 'Array' 被插入?根据您的问题和代码,您 总是 转换为数组,所以它总是会导致这种情况。是否有一些进一步的代码迭代结果数组(在这种情况下,正如我所说,你可能根本不需要数组转换)。 我只是喜欢使用关联数组 - 数组元素名称和 SQL 字段名称可以相同 - 稍后在代码中我也会进行排序等,使用数组更容易...... 似乎正在发生的事情是 json_encode 将空元素转换为空数组:字符串中的 '' - json_decode 然后将它们更改为 php 空数组,即 'Array()' 写入SQL 数据库简单地显示为“数组”。通过将 '' 替换为简单的空字符串 '' 作为编码和解码之间的中间步骤,我在最终数组中实现了空字符串而不是更深层次的数组。 如果您编辑问题以包含您正在解析的 XML 示例以及您想要使用的数组结构,我可以为您提供其他准备方法。 JSON、PHP 和 XML 具有根本不同的数据结构,因此json_decode(json_encode($foo)) hack 总是会有混乱的边缘情况。 (我同意它很短,但我绝对反对“好”:P) 【参考方案1】:

如果您的 json_encoded xml 中的任何内容字段包含“”,则此代码将中断。它发生在我身上,我正在研究一种解决方案来防止这种情况发生。

【讨论】:

解决方案在哪里? 我必须说我暂时没有。【参考方案2】:
function removeElementArrays($array) 
        $temp = [];
        foreach ($array as $record)
            $ta = [];
            foreach ($record as $k=>$v) 
                if (is_array($v)) 
                    $ta[$k]='';
                 else 
                    $ta[$k]=$v;
                
            
            array_push($temp, $ta);
        
        return $temp;
    

【讨论】:

请在您的答案中添加一些 cmets,以便更好地描述代码。

以上是关于在将 xml 转换为 php 数组时,空 xml 字段产生一个空数组而不是空字符串的主要内容,如果未能解决你的问题,请参考以下文章

将单个xml节点作为数组转换为json

在 PHP 中将 JSON 转换为 XML,但在 XML 中为 JSON 数组创建一个容器元素

使用 Json.NET (Newtonsoft) 将空数组从 JSON 转换为 XML

将php数组转换为xml文件

php解析xml,并将xml转换为层级数组

将xml转换为PHP数组