0

我正在尝试使用简单 XML 中的 XPath 元素解析 XML 文档。然而,下面的这个脚本(在 last.fm API 中搜索条目“U2”时)返回:

乘客 乘客 Bono 乘客 Bono U2 和 Green Day 乘客 Bono U2 和 Green Day REM 乘客 Bono U2 和 Green Day REM INXS

如您所见,有重复的节点。有没有办法可以阻止显示重复/重复节点?

(PHP 代码)

$xmlmusic = new SimpleXMLElement($result);
$releases = $xmlmusic->xpath('artist/similar/artist');
foreach ($releases as $artist) {
$artistResult .= $artist->name . PHP_EOL;
echo $artistResult;}

(XML 文档)

<?xml version="1.0" encoding="utf-8"?>
<lfm status="ok">
<artist>
  <name>U2</name>
  <mbid>704acdbb-1415-4782-b0b6-0596b8c55e46</mbid>
  <url>http://www.last.fm/music/U2</url>
  <image size="small">http://userserve-ak.last.fm/serve/34/107345.jpg</image>
  <streamable>1</streamable>
    <stats>
    <listeners>2613654</listeners>
    <playcount>96947986</playcount>
    </stats>

<similar>
  <artist>
  <name>Passengers</name>
  <url>http://www.last.fm/music/Passengers</url>
  <image size="small">http://userserve-ak.last.fm/serve/34/4826014.jpg</image>
  </artist>
4

1 回答 1

0

我假设您的 XML 片段只是完整结果的一小部分,所以......

您需要修改您的 foreach 循环以检查当前正在处理的艺术家是否曾被看过。最简单的方法是使用数组:

$seen = array();
foreach ($releases as $artist) {
    if (!isset($seen[$artist->name])) {
        $seen[$artist->name] = true;
    }
}

一旦循环完成,你就会得到一个很好的数组,每个艺术家都是 $seen 中的一个键。要复制您的简单字符串连接,您只需 implode/echo:

echo implode(array_keys(', ', $seen));
于 2011-12-14T05:03:12.790 回答