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

PHP解析XML商品数据实现商品图片与对应价格匹配展示问题

问题根因

现有代码存在3个核心错误,直接导致所有商品价格相同、仅展示少量商品的问题:

  • HTML拼接逻辑写在所有循环外层,遍历单品时$price、$firstImage变量会被持续覆盖,最终只保留最后一个单品的价格和图片,因此所有商品展示的价格完全一致
  • $articles初始化位置放在PRODUCT循环内部,每遍历一个新的商品组就会清空之前拼接好的内容,最终只会保留最后一组商品的渲染结果
  • 单品循环内错误写了$articles++,把字符串类型的拼接变量当成数字自增,完全没有执行预期的HTML拼接逻辑

修复方案

如果需要保留图片去重能力,可以用一个额外的数组存储已渲染过的图片链接,判断未重复再执行拼接,修复后代码如下:

$xml = simplexml_load_file($datei);
// 初始化存储所有单品HTML的变量 放在所有循环外层
$articles = "";
// 初始化去重用的数组 存储已经出现过的图片链接
$existedImages = [];
foreach($xml->PRODUCTDATA->PRODUCT as $p)
{
    $prod = (string) $p->P_NAME->VALUE;
    foreach ($p->ARTICLEDATA->ARTICLE as $article)
    {
        $price = (string)$article->A_PRICEDATA->A_PRICE->A_VK;
        $firstImage = (string)$article->A_MEDIADATA->A_MEDIA;
        // 图片去重判断 不存在才渲染
        if(!in_array($firstImage, $existedImages)){
            // 将当前单品的HTML拼接到总变量中
            $articles .= '<div class="photo"><img src="' . $firstImage . '" style="width: 120px;margin:5px;"><div class="product-info mt__15"><h3 class="product-title pr fs__14 mg__0 fwm">' . $prod . '</h3><span class="price">€' . $price . ' EUR</span></div></div>';
            // 把当前图片加入已渲染列表
            $existedImages[] = $firstImage;
        }
    }
}

注:如果不需要跨PRODUCT去重,仅需要同一个PRODUCT下的图片去重,可以把$existedImages的初始化放到PRODUCT循环内部即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:06:03