如何在PHP中组合XML中的列表

时间:2014-12-02 03:01:15

标签: php xml json

我有一个来自XML文件的零件清单,它类似于下面的内容。我希望能够使用PHP生成组合列表。例如,“第1部分”被记录两次。我希望在JSON输出或其他XML输出中生成时,Qty在第1部分下显示13。这样做的最佳方式是什么?我查看了php函数array_combine但是无法确定这些值是否可以在数学上组合而不是显示其中一个结果。我在simplexml_load_file()函数中从url加载XML。谢谢你的帮助

来自网址的我的XML:

   <db>
      <record>
         <part>Part 1</part>
         <qty>4</qty
      </record>
    <record>
         <part>Part 2</part>
         <qty>5</qty
    </record>
    <record>
         <part>Part 1</part>
         <qty>9</qty
    </record>
  </db>

想要展示:

   <db>
      <record>
         <part>Part 1</part>
         <qty>13</qty>
      </record>
    <record>
         <part>Part 2</part>
         <qty>5</qty
    </record>
  </db>

2 个答案:

答案 0 :(得分:0)

迭代XML文档,随时累积部分数量:

$simpleXmlElement = new SimpleXMLElement(<<<XML
<db>
    <record>
        <part>Part 1</part>
        <qty>4</qty>
    </record>
    <record>
        <part>Part 2</part>
        <qty>5</qty>
    </record>
    <record>
        <part>Part 1</part>
        <qty>9</qty>
    </record>
</db>
XML
);

$quantities = array();
foreach ($simpleXmlElement as $child) {
    if ($child->part && $child->qty) {
        $part = (string)$child->part;
        if (!isset($quantities[$part])) {
            $quantities[$part] = 0;
        }
        $quantities[$part] += (int)$child->qty;
    }
}
echo json_encode($quantities);

答案 1 :(得分:0)

simplexml_load_string()将解析xml并构建一​​个包含所有记录的数组作为&#39;记录&#39; =&GT;阵列(...)

然后您可以迭代记录数组并按类型

对它们进行分组
$parts = array();
foreach ($document['record'] as $item) {
    if (isset($parts[$item['part']]) $parts[$item['part']] += $item['qty'];
    else $parts[$item['part']] = $item['qty'];
}

在上面的循环之后,$ parts将包含将部件名称映射到qty

的哈希