2011-09-04 10 views
1

데이터베이스의 정보 집합을 포함하는 배열을 가지고 있지만 그 중 일부는 배열의 가장 깊은 부분에서 단 하나의 값을 가진 복제본입니다 . 예를 들어 내가 할 노력하고있어PHP는 다차원 배열에서 값을 찾아 배열에 배치합니다.

[0] => Array(['id'] => 1 , ['name'] => "First Array" , ['more'] => "stuff") 
[1] => Array(['id'] => 2 , ['name'] => "Second Array" , ['more'] => "stuff1") 
[2] => Array(['id'] => 2 , ['name'] => "Second Array" , ['more'] => "stuff2") 
[3] => Array(['id'] => 3 , ['name'] => "Third Array" , ['more'] => "stuff3") 
[4] => Array(['id'] => 3 , ['name'] => "Third Array" , ['more'] => "stuff4") 

대신 [ '더']의 배열과 배열에 같은 [ 'ID'] 필드가 어떤 배열을 얻을 수있다. 예를 들어 :

[0] => Array(['id'] => 1 , ['name'] => "First Array" , ['more'] => "stuff") 
[1] => Array(['id'] => 2 , ['name'] => "Second Array" , ['more'] => Array([0] => "stuff1" , [1] => "stuff2")) 
[2] => Array(['id'] => 2 , ['name'] => "Third Array" , ['more'] => Array([0] => "stuff3" , [1] => "stuff4")) 

나는이 몇 가지 방법을 시도했지만, 내가 얻을 수있는 가장 가까운 모든 [ '더']과 같이 1 개 배열에 값을 넣어하는 함수입니다 :

[0] => Array(['id'] => 1 , ['name'] => "First Array" , ['more'] => "stuff") 
[1] => Array(['id'] => 2 , ['name'] => "Second Array" , ['more'] => Array([0] => "stuff1" , [1] => "stuff2" , [2] => "stuff3" , [3] => "stuff4")) 

그리고이 함수에서입니다 :

<?php 
private function compress_duplicates($a = array()) { 
    $diff_key = array_diff_key($a , array_unique($a)); 
    $first_key = array_shift(array_keys($diffkey)); 
    $array["id"] = $diff_key[$first_key]["id"]; 
    $array["name"] = $diff_key[$first_key]["name"]; 
    foreach($diff_key as $term) { 
     $array["more"][] = $term["more"]; 
    } 
    return $array; 
} 
?> 

기본적으로 내가 부탁 해요 무엇을 : 어떻게 다차원 배열의 중복을 찾을 수 있습니다 다음 자신의 배열에 그 중복의 각을 배치? 당신이 $result 배열의 키를 재설정할지

답변

2
$result = array(); 
foreach ($array as $elem) { 
    if (isset($result[$elem['id']])) { 
     $result[$elem['id']]['more'] = array_merge((array)$result[$elem['id']]['more'], 
                array($elem['more'])); 
    } else { 
     $result[$elem['id']] = $elem; 
    } 
} 

는 선택적으로 $result = array_values($result) 하였다.

관련 문제