2012-11-10 5 views
1

내가 사용하는 배열은 3 개의 다른 배열 (3 개의 다른 mysql 결과)에서 병합 된 배열입니다. 각 배열은 몇 개의 필드가있는 연관 배열이고 count 필드는 필요한 필드입니다.연관 배열, 중복 값 찾기

다음 배열 조각은 이중 항목입니다. 배열을 검사하여 중복 (id 필드)이 있는지 확인하고 개수 필드의 합을 계산합니다. 이 문제를 해결하기위한 가장 좋은 방법은 무엇입니까?

array(21) { 
[2] => array(6) { 
    ["id"] => string(2) "71" 
    ["artist"] => string(7) "Arsenal" 
    ["title"] => string(10) "Oyebo Soul" 
    ["genres_id"] => string(2) "13" 
    ["mbid"] => string(36) "0048d294-1557-4e05-8c82-8bc3f8f11923" 
    ["count"] => string(1) "4" 
} 
[3] => array(6) { 
    ["count"] => string(1) "3" 
    ["id"] => string(2) "71" 
    ["artist"] => string(7) "Arsenal" 
    ["title"] => string(10) "Oyebo Soul" 
    ["genres_id"] => string(2) "13" 
    ["mbid"] => string(36) "0048d294-1557-4e05-8c82-8bc3f8f11923" 
} 

결과는 다음과 같다 :

[3] => array(6) { 
    ["count"] => string(1) "7" 
    ["id"] => string(2) "71" 
    ["artist"] => string(7) "Arsenal" 
    ["title"] => string(10) "Oyebo Soul" 
    ["genres_id"] => string(2) "13" 
    ["mbid"] => string(36) "0048d294-1557-4e05-8c82-8bc3f8f11923" 
} 

희망이 어떤 의미가 있습니다. 미리 감사드립니다

+0

: -good morning, 문제가 해결되었거나 여전히 정확한 답변을 찾고 있습니다 ........ –

+0

이제 답변을 확인하십시오! – kendepelchin

답변

0
"중복"앨범의 각 세트에 array_reduce()의 사용을 만드는 것이었다이 문제를 접근하는 다른 방법의 톤,하지만 떠올랐다 첫 번째로이 될거에요

:

// Group and index the albums by 'mbid'... 
$indexed = array(); 

foreach ($albums as $album) { 
    $indexed[$album['mbid']][] = $album; 
} 

// Reduce all the album groups by simply totaling their 'count's... 
$indexed = array_map(function($albums) { 
    return array_reduce($albums, function($a, $b) { 
     $a['count'] += $b['count']; 
     return $a; 
    }); 
}, $indexed); 

참고 :이 솔루션은 예제 에서처럼 count을 제외한 모든 앨범의 모든 정보가 동일하다고 가정합니다.

+0

첫 번째 부분에서는 $ indexed 배열에있는 모든 동일한 값을 그룹화합니다. 두 번째 부분은 내가 일할 수 없습니다. 나는 통지를 받는다 : 정의되지 않은 색인 : 112 행의 /Applications/MAMP/htdocs/result/modules/explore/engine/model.php 오류. $ a와 $ b를 모두 덤프하는 경우 둘 다 NULL입니다. 그러나 결과는 $ 인덱스를 덤프 할 때 마지막에 덤프 할 때 정확하므로 값은 7입니다. 그러나 다른 모든 필드는 인덱스 된 배열에서 사용할 수 없습니다. – kendepelchin

+0

@turncoat : 내 생각에, 이 코드를 다시 먹으면 예제에서와 같이'count' 인덱스가 없습니다. – FtDRbwLXw6

+0

그들은 모두 카운트 필드를 가지고 있는데, 이는 업데이트 된 유일한 필드입니다. – kendepelchin