【问题标题】:Merging PHP Array and XML Object [closed]合并 PHP 数组和 XML 对象
【发布时间】:2012-11-18 15:59:24
【问题描述】:

我有一个这样的数组,我通过 SQL 查询得到它

Array
(
    [0] => Array
        (
            [iId] => 1
            [sName] => Tom
        )

    [1] => Array
        (
            [iId] => 2
            [sName] => Jhon
        )
)

然后通过这个数组,我正在创建 POST 请求,并返回 XML 对象

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [method] => userstats_xml
            [version] => 2.0
        )

    [userstats] => SimpleXMLElement Object
        (
            [type] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [id] => 2
                                )

                            [test] => SimpleXMLElement Object
                                (
                                    [output] => 1280
                                )

                        )

                    [1] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [id] => 1
                                )

                            [test] => SimpleXMLElement Object
                                (
                                    [output] => 6112
                                )

                        )
                )
        )
)

现在我正在尝试获取下面列出的数组,因为我可以分别从第一个数组和 xml 对象输出数据,但我需要在一行中完成,例如

<a href="sId">sName - volume</a> 

数组形式:

Array
(
    [0] => Array
        (
            [iId] => 1
            [sName] => Tom
            [volume] => 6112
        )

    [1] => Array
        (
            [iId] => 2
            [sName] => Jhon
            [volume] => 1280
        )
)

【问题讨论】:

  • 到目前为止你尝试过什么?您必须手动解析 XML,没有办法绕过它。除了我们之外,您是否会为您编写该解析器?
  • 我认为这很容易理解。

标签: php xml arrays


【解决方案1】:

遍历数组并使用 ID 通过 XPath 查询 XML 以获得“输出”值

foreach ($peopleArray as $i => $person) {
    $xpathQuery = sprintf('//type[@id="%s"]/test/output', $person['iID']);
    $result = $xml->xpath($xpathQuery);
    if (isset($result[0])) {
        $peopleArray[$i]['volume'] = (string) $result[0];
    }
}

代码将获取数组中的每个 ID 并从中构造一个 XPath 查询。该查询在文档中查找所有输出元素,它们是测试元素的子元素,该元素必须是 SQL 数组中具有 ID 属性的 type 元素的子元素。如果找到结果,则将输出元素的值添加到当前迭代位置的 SQL 数组中。

请参阅 http://schlitt.info/opensource/blog/0704_xpath.html 以获得良好的 XPath 教程。

【讨论】:

  • 非常感谢,修改了您的答案并得到了我需要的东西! :)
【解决方案2】:

您必须遍历 XML 响应并构建一个以 iId 作为键和来自 xml 的卷/输出作为值的单维数组。

$xmlOutput = 
Array
( 
  [1] => 6112
  [2] = > 1280
)

然后您可以使用上面的数组将新元素添加到您从 SQL 获取的数组中。看下面的代码sn-p

 $sqlOutput =  
Array
    (
        [0] => Array
            (
                [iId] => 1
                [sName] => Tom
            )

        [1] => Array
            (
                [iId] => 2
                [sName] => Jhon
            )
    )
    foreach($sqlOutput as $entry)
    {
      $entry['volume'] = $xmlOutput[$entry['iId']];
    }

【讨论】:

  • @Gordon PHP Notice: Use of undefined constant iId - assumed 'iId' ?或者一般来说,代码是错误的。
猜你喜欢
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多