You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP SimpleXML按pid分组:如何仅显示唯一的首个产品?

处理XML产品Feed中的重复PID问题

我有一个包含products->product节点的产品Feed,其中包含pid、name、price等字段,部分产品的pid存在重复。我希望按pid对产品分组,或者仅显示每个pid对应的首个产品。

示例XML结构

<product>
  <pid>
  792422100
  </pid>
  <name>
  Produtname
  </name>
  <price>
  10.00$
  </price>
</product>
<product>
  <pid>
  792422100
  </pid>
  <name>
  Produtname 2
  </name>
  <price>
  10.00$
  </price>
</product>

当前遍历代码

foreach ($xml->product as $item) {
  echo $item->pid;
  echo $item->name;
  echo $item->price; 
}

方案1:仅显示每个唯一PID的首个产品

用数组记录已处理的PID,遍历过程中跳过重复项:

$processedPids = [];

foreach ($xml->product as $item) {
    // 清理PID中的空白字符(XML节点文本可能包含换行/空格)
    $pid = trim((string)$item->pid);
    
    if (!in_array($pid, $processedPids)) {
        echo $item->pid;
        echo $item->name;
        echo $item->price;
        
        // 将当前PID加入已处理列表
        $processedPids[] = $pid;
    }
}

方案2:按PID分组所有产品

用关联数组将同一PID的产品归为一组,便于后续批量处理:

$groupedProducts = [];

foreach ($xml->product as $item) {
    $pid = trim((string)$item->pid);
    
    // 将产品存入对应PID的分组
    $groupedProducts[$pid][] = $item;
}

// 遍历分组结果
foreach ($groupedProducts as $pid => $products) {
    echo "PID: {$pid}\n";
    foreach ($products as $product) {
        echo "  名称: {$product->name}, 价格: {$product->price}\n";
    }
}

注意:处理PID时必须用trim(),否则XML节点内的换行、空格会导致重复判断失效。

内容的提问来源于stack exchange,提问作者jelkaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:25:00