2017-12-20 34 views
0

그래서 한 시간 동안 이걸로 고민하고 있습니다 ... 저는 MusicBrainz API로 작업 중이므로 결과적으로 저는 아티스트가 모든 릴리스를 검색하려고합니다. , ColdPlay (지금은 다른 나라에서 몇 권의 릴리스가 있습니다.)PHP 배열로 값으로 모든 항목 검색

내가하고 싶은 것은 : 중복 노래 제목에 대한

• 검색의 단점을 극복하기 위해 MusicBrainz 응답 배열입니다.

{ 
    "title": "Parachutes", 
    "releaseDates": { 
     "UK": "2010-10-10", 
     "USA": "2010-10-12", 
     "AU": "2010-10-20", 
     "XW": "2010-11-11", 
    } 

} 

을 대신의 : https://hastebin.com/fejazububi.php

내가 사용하려고 중복 각각에 대해

그것이 그래서 응답이 같을 것이다

을 발표 것을 날짜와 국가를 찾을 수 array_filter, foreach etc .. 행운을 빈다. 당신 중 누군가가 이것을위한 suggesstion을 가지고 있습니까? 고맙습니다!

해결 :

생성 응답 : https://hastebin.com/ubiqasugav.php 코드 : 루프를 통해

 $Data = []; 
     $ReleasesData = $ArtistData->releases['releases']; 
     foreach ($ReleasesData as $rel) { 
      if(!isset($Data[$rel['title']]['releaseDates'][$rel['country']])) { 
       $Data[$rel['title']]['releaseDates'][$rel['country']] = [ 
        'date' => $rel['date'], 
        'status' => $rel['status'] 
       ]; 
      } 
     } 

     return print_r($Data); 
+0

? 샘플 데이터 배열과 해당 데이터에서 필요한 결과로 단순화하는 것이 좋습니다. – rishijd

+0

주어진 응답에서 데이터를 필터링하는 것이 그리 어렵지 않습니다. 매번 특정 노래 제목을 검색 하시겠습니까? 아니면 모든 세부 정보가 포함 된 전체 목록을 확인 하시겠습니까? –

+0

"Notice : Array to string conversion"만 가져옵니다. $ ReleasesData = $ ArtistData-> releases [ 'releases']; $ array_unique = array_unique ($ ReleasesData); $ array_diff = array_diff_assoc ($ ReleasesData, $ array_unique); ' –

답변

0

간단한 코드는 어디에서 원래의 배열은 당신이 검색하는 것

$titles = array_unique(array_column($myarray, 'title')); 
$result = array(); 
foreach ($titles as $title) { 
    $releaseDates = array(); 
    foreach ($myarray as $event) { 
     if ($event['title'] == $title) { 
      $releaseDates[$event['country']] = $event['date']; 
     } 
    } 
    $data['title'] = $title; 
    $data['releaseDates'] = $releaseDates; 
    $result[] = $data; 
} 
+0

광산보다 조금 나은 접근법. 잘 했어! –