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
相关产品推荐
相关产品推荐

