PHP Echo XML属性无需重复

时间:2013-12-09 18:43:10

标签: php xml echo repeat

我的问题与PHP和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 个答案:

答案 0 :(得分:2)

foreach循环内,将乐器名称转换为字符串并将其推入数组。一旦循环完成执行,您将拥有一个包含所有乐器名称的数组(当然还有重复项)。您现在可以使用array_unique()过滤掉数组中的重复值:

$instruments = array();

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

$instruments = array_unique($instruments);

Demo.

答案 1 :(得分: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