我使用mikealmond工具来解析MusicBrainz的PHP API(文档可用here)。我面对这样一个简单的问题,我无法理解我做错了什么。我尝试恢复给定艺术家的所有录音(由David Guetta为我的测试)。
以下是代码:
public function getRecordingsWithArtistMbdi() {
$arrayRecordings = array();
$includes = array('artist-credits', 'tags');
try {
$recordings = $this->mb->browseRecording('artist', '302bd7b9-d012-4360-897a-93b00c855680', $includes);
$countRecordings = $recordings['recording-count'];
foreach ($recordings['recordings'] as $recording) {
if (!in_array($recording['id'], $arrayRecordings)) {
$record = array(
'titre' => isset($recording['title']) ? $recording['title'] : null,
'duree' => isset($recording['length']) ? $recording['length'] : null,
'tags' => isset($recording['tags']) ? $recording['tags'] : null,
'artist-credit' => isset($recording['artist-credit']) ? $recording['artist-credit'] : null
);
$arrayRecordings[$recording['id']] = $record;
}
var_dump($arrayRecordings);
}
} catch (Exception $e) {
print $e->getMessage();
}
}
这是我var_dump
:
array (size=1)
'11329ba1-2645-4bbb-92ae-b2929188d51c' => // Ok, it is saved now
array (size=4)
'titre' => string 'ACDC' (length=4)
'duree' => int 241786
'tags' =>
array (size=1)
0 =>
array (size=2)
...
'artist-credit' =>
array (size=1)
0 =>
array (size=3)
...
array (size=2)
'11329ba1-2645-4bbb-92ae-b2929188d51c' => // Double information
array (size=4)
'titre' => string 'ACDC' (length=4)
'duree' => int 241786
'tags' =>
array (size=1)
0 =>
array (size=2)
...
'artist-credit' =>
array (size=1)
0 =>
array (size=3)
...
'124c53b9-6cc5-4f46-a811-598e8f2947fb' =>
array (size=4)
'titre' => string 'Baby When the Light' (length=19)
'duree' => null
'tags' =>
array (size=0)
empty
'artist-credit' =>
array (size=1)
0 =>
array (size=3)
...
如您所见,第一个数组已被记录,但尽管 if (!in_array($recording['id'], $arrayRecordings)) {
,每次都会学习。如何使用我当前的代码解决这个问题?
这是纯粹的php问题,问题不在于API的解析!
答案 0 :(得分:2)
in_array
在数组中查找值。在这种情况下,值是关联的数组。您可能想要检查密钥是否存在
if (!isset($arrayRecordings[$recording['id']]))
无论如何,由于您的循环正在替换重复数据,因此输出不会发生太大变化。在错误中写入相同的键会覆盖现有数据。因此$arrayRecordings
数组中没有重复项。
请注意,您在外观中执行var_dump
,导致您在构建时看到阵列的每个状态。您可能只期望最终结果。
如果您在var_dump
循环之外执行foreach
,则会发现$arrayRecordings
不包含任何重复项。