2013-11-15 2 views
-1

큰 배열을 필터링하고 일치하는 키 배열 만 반환하는 키가있는 작은 배열을 사용하고 싶습니다. 예 :다른 배열의 키를 사용하여 다차원 배열을 필터링하는 방법 PHP

ARRAY 1 (큰 배열) 내가 반환 $ 배열을 사용하는 경우

$array['23']['sasdseqw'] = 'bla bla'; 
$array['35']['sadasdsasa'] = '...dd'; 
$array['21']['saadadass'] = 'ssddds'; 
$array['15']['asadsadasas'] = 'adsdsas'; 

; 그것은 나에게 모든 열쇠와 가치를 줄 것이다. 하지만 위의 키에서 키 21과 15 만 가져와 다른 값을 제거하고 싶습니다. 방법? 내가 좋아하는 필터링 다만 키 만 (21) 및 (15) 값을 포함하는 배열에 큰 배열을 변환하는 21, 15 array2는 사용하고자하는

$array2 = array('21','15'); 

배열이 (필터) 35,23 ... 다른 키가없는 전체 배열

어떻게 달성할까요? 같은 $array2에없는

$array 이상

답변

0

루프 및 해제 모든 키 :

foreach ($array as $k => $v) { 
    if (!in_array($k, $array2)) { 
     unset($array[$k]); 
    } 
} 
+0

더 빠른 솔루션이 있습니까? 말하자면 큰 배열에 1000 개의 키가 있고 말하면 10 개만 반환됩니다 ... 그 솔루션이 어떤 영향을 미치나요? – user2780294

+0

@ user2780294 : 더 빠르면 빨리 벤치마킹해야합니다.) –

0

당신은 새로운 배열로 원하는 결과를 꺼내 array_intersect_key를 사용할 수 있습니다

$keys = [21, 15]; 
$result = array_intersect_key($array, array_flip($keys)); 

See it in action.

+0

큰 배열에 1000 개의 키가있는 경우 말하십시오. 어떤 솔루션이 더 빠릅니까? 실례합니다, 멍청한 질문이 있습니다 – user2780294

+0

@ user2780294 :'$ array'에 1000 개의 키가 있고 그 중 몇 개만 원한다면 가장 빠른 방법 일 것입니다. 그러나 다음 두 가지 사항을 명심하십시오. a) 1000 개의 항목이 많지 않습니다. 인간이 차이점을 인식 할 수 없으며 b) 모든 "빠른"질문에 대한 정답은 측정입니다. – Jon

관련 문제