我应该如何修改每个语句,只显示所有值都是唯一的条目?

时间:2014-12-29 21:37:50

标签: php curl simplexml

foreach($resultXML->products->children() as $product) { 
    echo "<p><a href=".$product->{'buy-url'}.">".$product->{'advertiser-name'}." - ".$product->price."</a></p>
    <p>".$product->{'description'}."</p>"; 

}

假设我想要筛选出具有相同标题的那些,并且只显示返回结果中显示的第一个标题。

我没有使用自己的数据库,这完全取决于显示的内容。

2 个答案:

答案 0 :(得分:0)

我认为最简单的方法是跟踪数组中的标题,并在每次迭代时检查它。

$titles = array();
foreach($resultXML->products->children() as $product) {
    if (in_array($product->title, $titles) continue;
    $titles[] = $product->title;
    echo "<p><a href=".$product->{'buy-url'}.">".$product->{'advertiser-name'}." - ".$product->price."</a></p>
    <p>".$product->{'description'}."</p>"; 
}

假设标题包含在$product->title中。你可以通过数组函数做一些更好的事情,但我没有理由让一个简单的问题变得复杂。

答案 1 :(得分:0)

您没有提供任何示例性XML,因此为

提供
<?xml version="1.0" encoding="UTF-8"?>
<example>
    <products>
        <product>
            <title>First Product</title>
            <advertiser-name>First Name</advertiser-name>
        </product>
    </products>
    <products>
        <product>
            <title>Second Product</title>
            <advertiser-name>First Name</advertiser-name>
        </product>
    </products>
    <products>
        <product>
            <title>Third Product</title>
            <advertiser-name>Second Name</advertiser-name>
        </product>
    </products>
</example>

您希望获取所有产品元素,其广告客户名称不是所有前面产品元素的广告客户名称。

因此,对于上面的XML,这将是第一个和第三个产品元素。

您可以将其写为XPath表达式:

/*/products/product[not(advertiser-name = preceding::product/advertiser-name)]

并且作为PHP代码:

$xml  = simplexml_load_string($buffer);

$expr = '/*/products/product[not(advertiser-name = preceding::product/advertiser-name)]';

foreach ($xml->xpath($expr) as $product) {
    echo $product->asXML(), "\n";
}

这会产生以下输出:

<product>
            <title>First Product</title>
            <advertiser-name>First Name</advertiser-name>
        </product>
<product>
            <title>Third Product</title>
            <advertiser-name>Second Name</advertiser-name>
        </product>

因此,对您的问题的一个答案是:只查询您感兴趣的文档中的那些元素.Xath可以用于 SimpleXMLElement

相关问题: