2012-03-29 11 views
1

こんにちは私は最終的には、順不同のHTMLリストを作成するために使用するより良いフォーマットで別のXMLファイルを作成するためにPHPを使用してXMLファイルを解析しています。PHPは重複したXMLフィードエントリを削除します

しかしXMLフィードに重複したエントリがあり、フォーマットされた出力にも重複したエントリがあります。どうすればフィードをループして、何とか複製を削除できますか?可能であれば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... 

すべてのヘルプは素晴らしいことです。ありがとう。

UPDATE:私は使用してエントリを追加したリスト全体でループすると

$filmList = array(); 

:私はこのようなフィードをループの前に列を

定義されている

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

$ filmTitleと$ filmLinkは、解析されたXMLの値です。それから重複をどのように削除するのですか?または、最初の場所に入るのをやめてください。

おかげで...

+0

あなたはハッシュマップを使用することができますことにより、重複をクリア(Filmtitle => Filmlink)あなたが値を挿入し、値が出回っ配列に存在するかどうかを確認? – Araw

+0

これはPHPの連想配列です。 – TPete

答えて

1

ただ、キー、値としてリンクとしてタイトルを使用し、配列内のそれらのペアを置きます。配列に挿入するときは、重複を単にオーバーライドします。

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") 

この設定で、キーがすでに存在するかどうかを確認する必要はありません。

+0

お返事ありがとうございます、私はほとんど思っていますが、私の質問を更新しました。 –

+0

@AdamWaite配列に値が存在するかどうかを確認することができます。 – TPete

+0

@AdamWaite私の編集をご覧ください。 – TPete

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

+0

これはうまくいっています。きれいでシンプルで、XMLで物事を維持します。 –

関連する問題