Загрузка первого вхождения элемента в массив

Я использую SimpleXML для анализа rss-канала, и если атрибут в возвращаемых массивах SimpleXML совпадает с моими строковыми данными. но некоторые элементы дублируются в файле XML, и я хочу использовать только их первое появление. но я получаю все дублированные результаты.

foreach($feed->city as $city){
    if(in_array($city['Name'], $cities)){
        echo $city['Name'].'<br />';
    }
}

где $feed->city — мои XML-данные, а $cities — мой массив.


person Farid Rn    schedule 15.11.2011    source источник


Ответы (1)


Я бы использовал для этого библиотеку php Xpath. Xpath 2.0 может сделать это напрямую, но встроенный язык Xpath 1.0 по-прежнему очень близок к этому.

    <!-- language: lang-php -->
$xmlDocument = new DOMDocument();
    if ($xmlDocument->load('file.xml')) {
    $xpath = new DOMXPath($xmlDocument);
    $nodeList = $xpath->query('//city/@Name', $xmlDocument);

отсюда у вас есть класс DOMNodeList. бросьте его в массив и удалите дубликаты. У меня сейчас нет среды php, чтобы закончить ее, но я хотел предложить другое направление, чем просто simplXML сам по себе.

person DefyGravity    schedule 15.11.2011
comment
Спасибо, но это не то, что я хочу. У меня есть XML-файл, подобный этому ‹название города=город1 Мин.=3 Макс.=12 Статус=7015 Категория=5 /› ‹Название города=город2 Мин.=-2 Макс.=10 Статус=7009 Категория=5 /› ‹Название города= city3 Min=1 Max=4 Status=7015 Category=5 /› ‹city Name=city2 Min=-2 Max=10 Status=7009 Category=23 /› Я извлек эти теги в массив с помощью SimpleXML, но, как вы видите, city2 дублируется, но в двух разных категориях. Я хочу удалить один из них в моем массиве. - person Farid Rn; 17.11.2011
comment
под удалением я подразумеваю удаление всего тега city2. и array_unique не работал. - person Farid Rn; 17.11.2011