防止在php中多次使用同一数组

防止在php中多次使用同一数组,php,Php,我使用mikealmond工具解析MusicBrainz的PHP API(文档可用)。我面临着一个如此简单的问题,以至于我无法理解我做错了什么。我尝试恢复给定艺术家的所有录音(由David Guetta为我的测试) 代码如下: public function getRecordingsWithArtistMbdi() { $arrayRecordings = array(); $includes = array('artist-credits', 'tags'); try

我使用mikealmond工具解析MusicBrainz的PHP API(文档可用)。我面临着一个如此简单的问题,以至于我无法理解我做错了什么。我尝试恢复给定艺术家的所有录音(由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\u 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的解析!

在数组中查找值。在您的情况下,这些值是关联的数组。您可能需要检查键是否存在

if (!isset($arrayRecordings[$recording['id']]))
无论如何,输出不会有太大变化,因为循环正在替换重复的数据。在错误中写入同一个键将覆盖现有数据。因此,
$arrayRecordings
数组中没有重复项

请注意,您正在外观内部执行一个
var\u dump
,使您在构建阵列时看到阵列的每个状态。您可能只希望看到最终结果


如果您在
foreach
循环之外执行
var\u dump
,您将看到
$arrayRecordings
不包含任何重复项。

我只需使用
isset($arrayRecordings[$recording['id'])而不是
数组中的
,当您可以检查精确的item@slash197:Same result双重信息是什么意思?您正在两次转储同一数组。在第一个循环中,记录添加到数组中,数组显示为1个元素。在第二个循环中,添加了另一个记录,数组现在有2个(唯一)元素。也可以看到Jasny(粗体线)的答案。天哪。我还没有看到我把我的
var\u dump
放在foreach里面。谢谢