【问题标题】:Foreach Articels from XML (image+Price)来自 XML 的 Foreach 文章(图片+价格)
【发布时间】:2021-12-03 12:25:57
【问题描述】:

SCREENSHOT在这种情况下,我得到了每篇文章的第一张图片,但所有文章的价格相同,请看截图。 我想在下面显示具有相关价格的每个产品图片。 我正在使用唯一的数组来删除图像重复,我认为这是错误的。 我正在从 xml 获取数据。

<PRODUCTDATA>
    <PRODUCT>
        <P_NAME>
            <VALUE>Lether Jacket</VALUE>
        </P_NAME>
        <ARTICLEDATA>
            <ARTICLE>
                <A_PRICEDATA>
                    <A_PRICE>
                        <A_VK>34.95</A_VK>
                    </A_PRICE>
                </A_PRICEDATA>
                <A_MEDIADATA>
                    <A_MEDIA>https://1.jpg</A_MEDIA>
                    <A_MEDIA>https://2.jpg</A_MEDIA>
                    <A_MEDIA>https://3.jpg</A_MEDIA>
                    <A_MEDIA>https://4.jpg</A_MEDIA>
                </A_MEDIADATA>
            </ARTICLE>
            <ARTICLE>
                <A_PRICEDATA>
                    <A_PRICE>
                        <A_VK>40.95</A_VK>
                    </A_PRICE>
                </A_PRICEDATA>
                <A_MEDIADATA>
                    <A_MEDIA>https://11.jpg</A_MEDIA>
                    <A_MEDIA>https://22.jpg</A_MEDIA>
                    <A_MEDIA>https://33.jpg</A_MEDIA>
                    <A_MEDIA>https://44.jpg</A_MEDIA>
                </A_MEDIADATA>
            </ARTICLE>
        </ARTICLEDATA>
    </PRODUCT>
    <PRODUCT>
        <P_NAME>
            <VALUE>Jeans</VALUE>
        </P_NAME>
        <ARTICLEDATA>  
            <ARTICLE>
                <A_PRICEDATA>
                    <A_PRICE>
                        <A_VK>29.95</A_VK>
                    </A_PRICE>
                </A_PRICEDATA>
                <A_MEDIADATA>
                    <A_MEDIA>https://111.jpg</A_MEDIA>
                    <A_MEDIA>https://222.jpg</A_MEDIA>
                    <A_MEDIA>https://333.jpg</A_MEDIA>
                    <A_MEDIA>https://444.jpg</A_MEDIA>
                </A_MEDIADATA>
            </ARTICLE>
            <ARTICLE>
                <A_PRICEDATA>
                    <A_PRICE>
                        <A_VK>19.95</A_VK>
                    </A_PRICE>
                </A_PRICEDATA>
                <A_MEDIADATA>
                    <A_MEDIA>https://1111.jpg</A_MEDIA>
                    <A_MEDIA>https://2222.jpg</A_MEDIA>
                    <A_MEDIA>https://3333.jpg</A_MEDIA>
                    <A_MEDIA>https://4444.jpg</A_MEDIA>
                </A_MEDIADATA>
            </ARTICLE>
        </ARTICLEDATA>
    </PRODUCT>
</PRODUCTDATA>
$xml = simplexml_load_file($datei);
    foreach($xml->PRODUCTDATA->PRODUCT as $p)
    {
        $prod = (string) $p->P_NAME->VALUE;
        $articles = "";
        foreach ($p->ARTICLEDATA->ARTICLE as $article)
        {
            $price = (string)$article->A_PRICEDATA->A_PRICE->A_VK;
            $firstImage = (string)$article->A_MEDIADATA->A_MEDIA;
            $articles++;
        }
    }
$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>';

因为 $p 之前被定义为 XMl 中的 Parent 元素,作为 Product 里面有许多文章。 然后变量 $articlesss 将被插入到一个包含完整 HTML 页面的 php 长字符串中,所以这就是我试图将它们放在这个变量中的原因。

【问题讨论】:

  • 你说的首价是什么意思?只有一个价格。
  • 我很惊讶你能得到一个显示器。因为您将$prices[$m] 设置为数组,但您连接了"&gt;€' . $prices . ' EUR&lt;。这应该给一个 array to string 错误。
  • 我正在获取每篇文章的第一张图片,但所有文章的价格相同。我编辑了帖子,谢谢
  • 那是因为$prices。应该是$prices[$m]
  • 它变得非常复杂,这就是为什么如果有机会重组它。我现在正在这样做,我正在考虑将文章作为数组,所以每篇文章都应该有第一张图片和他自己的价格。我被困在我不知道如何将它们组合在一起作为变量字符串的地方(与 $images 相同)

标签: php html xml


【解决方案1】:

您不必跟踪计数器和循环来判断它是否是第一个(索引 0)条目。

假设文章的所有字段都存在,您可以使用 SimpleXML,循环所有文章条目,并使用索引 0 获取价格(因为只有一个价格)和每篇文章的第一张图片。

然后每个条目,您可以将带有变量的字符串附加到$articles

请注意,示例代码中不存在$produkt,因此我为示例添加了一个硬编码值。

$articles = "";

foreach ($xml->ARTICLEDATA->ARTICLE as $article) {
    $price = (string)$article->A_PRICEDATA->A_PRICE->A_VK;
    $firstImage = (string)$article->A_MEDIADATA->A_MEDIA[0];
    $produkt = "Product 1";
    $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">' . $produkt . '</h3><span class="price">€' . $price . ' EUR</span></div></div>';
}

echo $articles;

查看PHP demo

【讨论】:

  • 首先,非常感谢您的努力,这意味着很多。我只是想告诉你,当我试图将变量 $articles 移到 Foreach 之外并使其成为我拥有的三种情况(主猫、子猫、产品猫)的一行时,它只带回一个照片和一个价格(即使选择 Main Cat 作为示例,也必须返回与其相关的所有产品)。但是当我像你在foreach中那样写它时,它会重复每个产品图像和信息五次。你知道为什么吗? taaaanks
  • @MaherHaddad 哪个变量?如果将变量放在 foreach 之外,并将其填充到 foreach 中,则每次都会覆盖该变量,使该变量包含 foreach 的最后一次迭代的值。
  • 我将扩展xml源和php代码也许会有所作为,只要您现在在这里,您可能会立即弄清楚。我是刚毕业的初级开发人员,仍然在这么小的案例上浪费了很多时间。
  • 我希望我能在最后的编辑中说清楚
  • @MaherHaddad 查看此示例3v4l.org/a5GT6
【解决方案2】:
                            $m=0;
                            foreach($p->ARTICLEDATA->ARTICLE as $articless)
                            {
                                if($m==0)
                                {
                                    $price = (string) $articless->A_PRICEDATA->A_PRICE->A_VK;
                                    foreach($articless->A_MEDIADATA as $bild)
                                    {
                                        $firstImage = (string) $bild->A_MEDIA[2];
                                        $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>';
                                    }
                                }
                            $m++;
                            }

【讨论】:

  • 我终于可以通过这种方式实现它了。感谢大家的努力。直到我们再次相遇
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 2017-01-04
相关资源
最近更新 更多