PHP删除重复的XML提要条目

时间:2012-03-29 08:52:31

标签: php html xml parsing

您好我正在使用PHP解析XML文件以更好的格式创建另一个XML文件,我最终将用它来填充无序的HTML列表。

但XML Feed有重复的条目,因此我的格式化输出也有重复的条目。我如何循环遍历Feed并以某种方式删除重复项?尽可能使用PHP。我是一个新手,我不知道该如何处理这个。

这是一个典型的输出(带有重复的格式化XML):

    <films>
    <film>
    <filmtitle>Death Race 2</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=377029</filmlink>
    </film>

    <film>
    <filmtitle>Death Race 2</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=377029</filmlink>
    </film>

    <film>
    <filmtitle>Shattered Glass</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=UKIC48</filmlink
    </film>

    <film>
    <filmtitle>Shattered Glass</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=UKIC48</filmlink>
    </film>

    <film>
    <filmtitle>The Brothers Bloom</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=380196</filmlink>
    </film>

    <film>
    <filmtitle>The Brothers Bloom</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=380196</filmlink>
    </film>

...and so on...

任何帮助都会很棒。感谢。

更新:

我在循环遍历Feed之前定义了一个数组:

$filmList = array();

在整个列表中循环时,我使用以下内容添加了条目:

array_push($filmsForList, array("filmTitle" => $title, "pictureLink" => $pictureLink);

其中$ filmTitle和$ filmLink是解析后的XML中的值。我该如何删除重复项?或者阻止他们进入首位?

...谢谢

2 个答案:

答案 0 :(得分:5)

试试这个:

<?php
$str=<<<'EOT'
    <films>
    <film>
    <filmtitle>Death Race 2</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=377029</filmlink>
    </film>

    <film>
    <filmtitle>Death Race 2</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=377029</filmlink>
    </film>

    <film>
    <filmtitle>Shattered Glass</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=UKIC48</filmlink>
    </film>

    <film>
    <filmtitle>Shattered Glass</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=UKIC48</filmlink>
    </film>

    <film>
    <filmtitle>The Brothers Bloom</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=380196</filmlink>
    </film>

    <film>
    <filmtitle>The Brothers Bloom</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=380196</filmlink>
    </film>
    </films>
EOT;

$xml=simplexml_load_string($str);

$seen=array();

$len=$xml->film->count();
for($i=0;$i<$len;$i++){
    $key=(string) $xml->film[$i]->filmlink;
    if (isset($seen[$key])) {
        unset($xml->film[$i]);
        $len--;
        $i--;
    }else{
        $seen[$key]=1;
    }
}

echo $xml->asXML();

?>

这可以通过filmlink

清除重复项

答案 1 :(得分:1)

将这些对放在一个数组中,使用title作为键,link作为值。您只需在插入数组时覆盖重复项。

有关Java哈希映射和PHP数组的讨论,请参阅此question

编辑:

这样的事情:

$a = array("one" => "one_link", "two" => "two_link", "one" => "one_link");

$target = array();

foreach ($a as $key => $value)
   $target[$key] = $value;

这会让你:

array("one" => "one_link", "two" => "two_link")

使用此设置,无需检查密钥是否已存在。