PHP удаляет повторяющиеся записи в фиде XML - PullRequest
1 голос
/ 29 марта 2012

Привет, я анализирую XML-файл, используя PHP для создания другого XML-файла в более хорошем формате, который я в конечном итоге собираюсь использовать для заполнения неупорядоченного списка HTML.

Но в фиде 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. Как мне удалить дубликаты из этого? Или остановить их вход в первую очередь?

Спасибо ...

Ответы [ 2 ]

5 голосов
/ 29 марта 2012

Попробуйте это:

<?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 голос
/ 29 марта 2012

Просто поместите эти пары в массив, используйте заголовок в качестве ключа, ссылку в качестве значения.Вы просто переопределите дубликаты при вставке в массив.

См. Этот вопрос для обсуждения хеш-карт Java и массивов PHP.

Редактировать:

Примерно так:

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

При такой настройке нет необходимости проверять, существует ли ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...