2012-11-16 4 views
0

그래서 가족 구성원과 이름이있는 두 개의 연관 배열이 있습니다. 각 배열에는 동일한 인덱스 키가 있지만 값은 다릅니다. 두 배열을 결합하고 중복 값을 제거하고 중복 키를 제거한 다음 알파벳순으로 정렬해야합니다.두 개의 연관 배열을 결합하여 키를 유지하면서 중복 값을 제거하고 알파벳순 정렬

은 지금까지 나는

Array1 = array(
    "Grandma"=>"Laurie", 
    "Grandpa"=>"John", 
    "Uncle"=>"Jeff", 
    "Aunt"=>"Julie", 
    "Cousin1"=>"Julie", 
    "Cousin2"=>"Anna"); 
$Array2 = array(
    "Grandma"=>"Shannon", 
    "Grandpa"=>"Phillip", 
    "Uncle"=>"Mike", 
    "Aunt"=>"Laurie", 
    "Cousin1"=>"Anna", 
    "Cousin2"=>"Jeff", 
    "Cousin3"=>"Kate"); 
//Combine the arrays 
$array = array_merge_recursive($Mother_side, $Father_side); 

지금까지 너무 좋아

을 가지고 있지만 나는 시도 :

$Distinct_names = array_unique($array); 

나는 오류가 주목받을 : 문자열 변환에 배열. 어떤 아이디어? 감사.

+0

"중복 키가 아님"을 의미하는 경우 중복 키를 사용할 수 없습니다. –

+1

출력 데이터의 형식을 지정하는 방법을 보여주는 네 번째 배열을 게시하면 도움이 될 것입니다. –

답변

1

array_unique()을 다차원 배열로 사용할 수 없습니다. array_unique()는 각 값을 문자열로 변환하고 비교를 수행하지만 배열을 문자열로 변환 할 수는 없습니다. 예상되는 결과가 나오지 않습니다.

나는 당신이 바라는 것보다 조금 더 똑똑해야한다고 생각한다; 네가 나에게 5 분을 준다면 나는 무엇인가를 찾을 수 있을지 모른다. : P

이 원하는 출력 (알파벳 순서에 고유 한 이름의 배열)을 달성 할 수 있지만, 꽤 신속하고 더러운 솔루션입니다 :

$names = array(); 
foreach ($Array1 as $name) $names[] = $name; 
foreach ($Array2 as $name) $names[] = $name; 
$names = array_unique($names); 
asort($names); 
print_r($names); 

출력 :

Array 
(
    [0] => Laurie 
    [1] => John 
    [2] => Jeff 
    [3] => Julie 
    [5] => Anna 
    [6] => Shannon 
    [7] => Phillip 
    [8] => Mike 
    [12] => Kate 
) 
+0

내가 원하는 것을 얻기위한 다른 방법은 없습니까? – user1781482

+0

정말 빠른 솔루션을 포함하도록 내 질문을 편집했습니다. – Maccath

1

시도 :

$array1 = array(
"Grandma"=>"Laurie", 
"Grandpa"=>"John", 
"Uncle"=>"Jeff", 
"Aunt"=>"Julie", 
"Cousin1"=>"Julie", 
"Cousin2"=>"Anna"); 

$array2 = array(
"Grandma"=>"Shannon", 
"Grandpa"=>"Phillip", 
"Uncle"=>"Mike", 
"Aunt"=>"Laurie", 
"Cousin1"=>"Anna", 
"Cousin2"=>"Jeff", 
"Cousin3"=>"Kate"); 

//Combine the arrays 
$array = array_merge_recursive($array1, $array2); 

function multi_arr_unique($array) 
{ 
$distinct = array_map("unserialize", array_unique(array_map("serialize", $array))); 

foreach ($distinct as $k => $v) 
{ 
if (is_array($v)) 
{ 
    $distinct[$k] = multi_arr_unique($v); 
} 
} 

return $distinct; 
} 

multi_arr_unique($distinct);