2011-10-22 6 views
0

배열에 대한 PHP 질문. 두 개의 배열이 있다고 가정하십시오.배열의 키 값 쌍 결합 및 제거

[first] => Array 
    (
     [0] => users 
     [1] => posts 
     [2] => comments 
    ) 

[second] => Array 
    (
     [users] => the_users 
     [posts] => the_posts 
     [comments] => the_comments 
     [options] => the_options 
    ) 

어떻게이 두 배열을 비교할 수 있습니까? 의미, 첫 번째 배열의 값이 두 번째 배열의 키 (array_flip?)와 같은지 여부를 어떻게 확인할 수 있습니까? (array_merge?). 그리고 값/키 쌍이 일치하는 배열에서 제거하십시오.

기본적으로, 최종 결과는 중복 제거, 결합 된 두 개의 배열 것, 유일한 인덱스는 다음과 같습니다

[third] => Array 
    (
     [options] => the_options 
    ) 

답변

3

이 시도 :

$third = array_diff_key($second,array_flip($first)); 
+0

아! array_diff_key는 내가 원했던 것입니다. Vik, 정말 고마워. – mousesports

0

없는 경우가 이것에 대한 내장 함수,하지만 수 시도 :이 $first$second에 해당 키가없는 항목이없는 것으로 가정합니다

$third = array(); 
foreach(array_keys($second) as $item) 
    if(!in_array($item, $first)) 
    $third[$item] = $second[$item]; 

참고. 이 설명하기 위해, 당신은 당신이에 대한에 $third의 값을 설정합니다 모르겠어요 (추가 루프를 가질 수있다, 어쩌면 null :

foreach($first as $item) 
    if(!in_array($item, array_keys($second))) 
    $third[$item] = null; 
+0

예, 내장 기능이 있는지 묻는 중입니다. 두 번째 foreach와 매우 비슷한 작업을 수행 했으므로 잘 작동합니다. 그것을하는 다른 방법이 있는지 궁금 해서요,하지만 고마워 친구 : – mousesports

+0

좋아, 편집 해 주셔서 감사합니다. 방금 추가 한 두 번째 foreach는 현재하고 싶은 일에 불필요합니다. 그러나 앞으로는 유용 할 것입니다. – mousesports

+0

이것은 O (n^k) 또는 O (n^2)의 두 가지 대답에 따라 다르지만 O (n) 시간에 할 수있을 때 끔찍합니다. 1,000에 셀 수있을 때 1,000,000에 해당하는 것과 같습니다. – evan

0

이를 할 매우 간단하다이 방법은 매우 효율적입니다 :

$third = $second; 

foreach($first as $value) 
{ 
    if (isset($third[$value])) 
    { 
     unset($third[$value]); 
    } 
} 
0

이 UR 질문

을에 대한 답변입니다