2012-01-04 3 views
2

을 감안할 때 두 배열 교차 :PHP 배열 (일종의)

$foo = array('a', 'b', 'c'); 
$bar = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); 

이 거기를 내장 다음과 같은 결과 배열을 생산하는 PHP 함수?

$result = array('a' => 1, 'b' => 2, 'c' => 3); 

내가 php.net에 Array Functions 목록을 봤는데,하지만 내가 무엇을 찾고 찾을 수 없습니다. 필요한 경우 직접 수행하는 방법을 알고 있지만이 작업은 휠체어를 재발견하고 싶지 않은 기본 제공 함수가있을 수있는 일반적인 문제 일 수 있다고 생각했습니다.

+0

기본적으로 바의 키가 $ foo에 일치하는 값이있는 $ bar에서 키/val 쌍을 꺼내시겠습니까? –

+0

설명 : 첫 번째 배열과 일치하는 키를 가진 두 번째 배열에서 값을 추출하고 싶습니까? – ManseUK

+0

네, 두 번째 배열 ('$ bar')의 요소를 가진 결과 배열을 원하지만 첫 번째 배열의 배열 만 ('$ foo') 원합니다. – FtDRbwLXw6

답변

6

array_fliparray_intersect_keys 사용하는 또 다른 방법 :

$foo = array('a', 'b', 'c'); 
$bar = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); 

$common = array_intersect_key($bar, array_flip($foo)); 

출력을

array(3) { 
    ["a"]=> 
    int(0) 
    ["b"]=> 
    int(1) 
    ["c"]=> 
    int(2) 
} 
+0

원래 $ 막대 배열 –

+0

에서의 값을 유지하기 위해 array_intersect_key()에 대한 인수의 순서를 뒤집습니다. @Mark Baker. 잘 했어! 감사. – Josh

+0

이것은 내가 게시 한 솔루션과 매우 비슷하지만,'array_fill_keys ($ foo, NULL)'를 사용하는 것보다'array_flip ($ foo)'를 사용하기 때문에 선택했습니다. – FtDRbwLXw6

0

가 게시 후, 나는이 일을하는 한 가지 방법을 생각 :

array_intersect_key($bar, array_fill_keys($foo, NULL)) 

비록, 이것은 내가 기대했던 간결한, 내장 함수는 결과를 구성하는 것보다 확실히 더 나은, 정말 아니다 배열을 수동으로.

그것은 더러운 해킹의 비트,하지만 작동
+2

array_flip ($ foo, NULL)을 array_flip ($ foo) –

+0

으로 대체 할 수 있습니다. @MarkBaker : 연관성이없는 배열에서'array_flip() '을 사용한 적이 없었습니다. 고마워요. 고마워요. – FtDRbwLXw6

+0

배열을 사용하는 가장 좋은 유형 .... 중복 된 값으로 인해 뒤집을 때 덮어 쓰기 키가 발생할 염려가 없습니다. –

1

:

function extractKeys($keys, $data) { 
    extract($data); 

    return call_user_func_array('compact', $keys); 
} 

$foo = array('a', 'b', 'c'); 
$bar = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); 

var_dump(extractKeys($foo, $bar)); 

출력 :

array(3) { 
    ["a"]=> 
    int(1) 
    ["b"]=> 
    int(2) 
    ["c"]=> 
    int(3) 
}