【问题标题】:PHP XML to ArrayPHP XML 到数组
【发布时间】:2016-04-29 22:19:03
【问题描述】:

编辑:我使用 json_decode 的原因是将它从 XML 获取到一个数组。

所以这是我的困境:

我访问一个返回 xml 的 API,然后将其转换为数组,如下所示:

public function convertXMLtoJSON($xml){
        return json_decode(json_encode(simplexml_load_string($xml), true), true);
}

当我有单个项目时(例如:)[SINGLE ITEM XML]

 <LineItem>
       <field>hello</field>
 </LineItem>

显示如下:[SINGLE ITEM ARRAY]

[LineItem] => Array(

     [field] => hello

)

现在如果我有:[MULTI ITEM XML]

 <LineItem>
       <field>hello</field>
 </LineItem>
 <LineItem>
       <field>hello part 2</field>
 </LineItem>

我得到:[多项目数组]

[LineItem] => Array(

         [0] => Array (

             [field] => hello

         )

         [1] => Array (

             [field] => hello part 2

         )

)

我需要将第一个示例放在一个数组中,而不仅仅是它本身,因为区分两者太费时了。

【问题讨论】:

  • json_decode(json_encode(...)) 为什么?
  • 关于“太耗时”的观点,你可以if ( count($arr) &gt; 1) { // multiple elements } else { // single element }
  • 只需检查该值是否为数组。如果是,请将其拉​​开(或进行内爆);如果不是,则取值。 XML 到 JSON 的转换只会在有多个数组时将它们放入数组中。如果它每次都这样做,那么每个元素都会在一个数组中,那就更难看了。
  • 坦率地说,将 XML 转换为 JSON 通常是个坏主意,确实应该避免。为什么不直接使用 SimpleXML 并使用面向对象的遍历来查找您的元素? JSON 是一个完全没有必要的步骤。
  • 第二种情况你想要的格式是什么?请注意,数组必须有唯一的键。

标签: php arrays xml


【解决方案1】:

据我了解您的具体问题,您希望所有内容都像多数组一样格式化,即使只有一个结果。

我会在返回后检查数组的计数是否为 1 来处理这个问题。让我们假设您有一个名为 $xmlArray 的数组,它具有您描述的格式的单个结果。

if (count($xmlArray) == 1) {
    $multiArray['LineItem'][] = $xmlArray['LineItem'];
}

这会将具有单个元素的 $xmlArray 转换为您在问题中描述的多行数组格式。

【讨论】:

    猜你喜欢
    • 2012-08-22
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2012-03-21
    相关资源
    最近更新 更多