2011-11-15 1 views
0

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

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

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

ответ

1

Я бы использовал библиотеку Xpath php для этого. 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, чтобы закончить ее, но я хотел предложить другое направление, чем просто simpleXML сам по себе.

+0

Спасибо, но это не то, что я хочу. У меня есть xml-файл, подобный этому \t <название города = "город1" Мин = "3" Макс = "12" Статус = "7015" Категория = "5" /> \t <название города = "city2" Мин = «-2» Макс = «10» Состояние = «7009» Категория = «5» /> \t <название города = "город3" Мин = "1" Макс = "4" Статус = "7015" Категория = "5" /> \t Я извлек эти теги массиву с SimpleXML, но, как вы можете видеть city2 дублируется, но в двух разных категориях. Я хочу удалить один из них в моем массиве. –

+0

удалить, я имею в виду удалить весь тэг city2. и array_unique не работал. –

Смежные вопросы