在将 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 字段产生一个空数组而不是空字符串的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中将 JSON 转换为 XML,但在 XML 中为 JSON 数组创建一个容器元素