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


How Can I combine a list from XML in PHP

我有一个来自XML文件的零件清单,它类似于下面的内容。我希望能够使用 PHP 生成组合列表。例如,"第 1 部分"被记录两次。我希望在 JSON 输出或其他 XML 输出中生成时,数量在第 1 部分下显示 13。最好的方法是什么?我array_combine查看了 php 函数,但无法弄清楚这些值是否可以在数学上组合而不是显示其中一个结果。我正在从 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>

循环访问 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);

simplexml_load_string() 将解析 xml 并构建一个包含所有记录的数组,作为 'record' => array(...)

然后,您可以迭代记录数组并按类型对它们进行分组

$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 的哈希