2013-12-09 3 views
1

мой вопрос связан с PHP и XML. Я хотел бы выделить некоторые атрибуты, но повторяю только один раз.PHP Echo XML Атрибуты без повторения

Скажите это был XML я имел дело с, и его называли beatles.xml:

<XML_DATA item=“TheBeatles”> 
    <Beatles> 
     <Beatle Firstname=“George” Lastname=“Harrison” Instrument=“Guitar”>Harrison, George</Beatle> 
     <Beatle Firstname=“John” Lastname=“Lennon” Instrument=“Guitar”>Lennon, John</Beatle> 
     <Beatle Firstname=“Paul” Lastname=“McCartney” Instrument=“Bass”>McCartney, Paul</Beatle> 
     <Beatle Firstname=“Ringo” Lastname=“Starr” Instrument=“Drums”>Starr, Ringo</Beatle> 
    </Beatles> 
</XML_DATA> 

Это PHP У меня есть до сих пор:

$xml = simplexml_load_file("http://www.example.com/beatles.xml"); 
$beatles = $xml->Beatles->Beatle; 

foreach($beatles as $beatle) { 
echo $beatle->attributes()->Instrument.','; 
} 

Я бы ожидать, что это эхо-гитара, гитара, бас-гитара, ударные, но я бы хотел, чтобы гитара показывала только один раз. Как я могу предотвратить повторение значений атрибутов повторения?

ответ

2

Внутри цикла foreach введите имя инструмента как строку и нажмите его в массив. Как только цикл завершит выполнение, у вас будет массив, содержащий все имена инструментов (с дубликатами, конечно). Теперь вы можете использовать array_unique() отфильтровать повторяющиеся значения из массива:

$instruments = array(); 

foreach($beatles as $beatle) { 
    $instruments[] = (string) $beatle->attributes()->Instrument; 
} 

$instruments = array_unique($instruments); 

Demo.

+0

Спасибо! Это дало мне точный результат, на который я надеялся :) – user1339316

1
$xml = simplexml_load_file("http://www.example.com/beatles.xml"); 
    $beatles = $xml->Beatles->Beatle; 
    $result = array(); 
    foreach($beatles as $beatle) { 

     if (!array_key_exists($beatle->attributes()->Instrument, $result)) { 
      $result[] = $beatle->attributes()->Instrument; 
      // echo $beatle->attributes()->Instrument.','; 
     } 

} 

затем петлю через $result массив с foreach

Либо использовать xpath.

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