我的问题与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.',';
}
我希望这可以回应吉他,吉他,贝斯,鼓,但我希望吉他只显示一次。如何防止重复属性值回显?
答案 0 :(得分:2)
在foreach
循环内,将乐器名称转换为字符串并将其推入数组。一旦循环完成执行,您将拥有一个包含所有乐器名称的数组(当然还有重复项)。您现在可以使用array_unique()
过滤掉数组中的重复值:
$instruments = array();
foreach($beatles as $beatle) {
$instruments[] = (string) $beatle->attributes()->Instrument;
}
$instruments = array_unique($instruments);
答案 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。