2010-08-11 5 views
6

배열의 하위 집합을 가져 오는이 함수를 작성했습니다. php가이 기능을 내장하고 있습니까? 문서에서 하나를 찾을 수 없습니다. 내가 바퀴를 다시 발명한다면 낭비 같아.키 배열을 기반으로 배열의 하위 집합 가져 오기

function array_subset($array, $keys) { 
    $result = array(); 
    foreach($keys as $key){ 
     $result[$key] = $array[$key]; 
    } 
    return $result; 
} 
+0

[주어진 키에 대한 하위 집합을 반환하는 PHP 배열 함수]의 가능한 복제본 (https://stackoverflow.com/questions/12543361/php-array-function-that-returns-a-subset-for-given-keys)) –

답변

10

array_diff_keyarray_intersect_key 당신이 원하는 아마.

+1

함수 이름은 단수입니다. http://www.php.net/manual/en/ref.array.php PHP는 명명 규칙을 정리해야합니다! – Keyo

+1

연관 배열의 키를 비 연관 배열의 값 테이블을 매핑 할 때 한 인수에'array_flip'을 사용하여 intersection/diff가 두 키 또는 두 값 중 하나를 기반으로하는지 확인할 수 있습니다. 둘 중 하나의 혼합. – danronmoon

4

나는 항상 이것을 원한다. Underscore의 PHP 버전 인 pick처럼. 열쇠 첫 번째 인수의 모든 요소를 ​​

$a = ['foo'=>'bar', 'zam'=>'baz', 'zoo'=>'doo']; 

// Extract foo and zoo but not zam 
print_r(array_intersect_key($a, array_flip(['foo', 'zoo']))); 
/* 
Array 
(
    [foo] => bar 
    [zoo] => doo 
) 
*/ 

array_intersect_key 반환 :

그것은 추한하고 직관적이지만, 제가 가끔하는 일은이 (내가이 prodigitalson가에서지고 있었는지 것 같아요)입니다 두 번째 인수 (및 모든 후속 인수가있는 경우)에 있습니다. 그러나 키를 키와 비교하기 때문에 편의상 array_flip을 사용합니다. 나는 또한 ['foo' => null, 'zoo' => null]을 사용했을 수도 있지만 그게 더 못 생겼다.

관련 문제