【问题标题】:On converting xml to php array empty xml fields producing an empty array rather than empty string在将 xml 转换为 php 数组时,空 xml 字段产生一个空数组而不是空字符串
【发布时间】: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)

标签: php arrays xml json simplexml


【解决方案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,以便更好地描述代码。
猜你喜欢
  • 2016-10-17
  • 2012-07-30
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
相关资源
最近更新 更多