2011-01-13 3 views
3

결합 할 배열이 두 개 있습니다. 첫 번째 배열에서 값을 가져와이 값을 두 번째 배열에서 일치하는 키로 사용하고 세 번째 배열 (내가 사용할 배열)에 결합해야합니다. 즉PHP, 첫 번째 배열의 값을 키로 사용하여 두 배열을 새 배열로 결합

,이 첫 번째 배열을 가지고 :

Array 
(
[24] => 5 
[26] => 4 
[27] => 2 
) 

두 번째 배열 내가 가진 :

Array 
(
[1] => McDonalds 
[2] => Burger King 
[3] => Wendys 
[4] => Taco Bell 
[5] => Hardees 
) 

그리고 마지막으로,이 내가 갖고 싶어 배열은 다음과 같습니다

Array 
(
[5] => Hardees 
[4] => Taco Bell 
[2] => Burger King 
) 

충분히 쉬운 것처럼 보이지만 그걸 알아낼 수 없습니다. 나는 행운과 함께 array_intersect_key와 같은 다양한 배열 함수를 시도했다.

// Note that elements of $combined will retain the order of $array2, not $array1 
$combined = array_intersect_key($array2, array_flip($array1)); 

답변

7

여기에 간단한 imperative 솔루션입니다 , 두 번째 인수는 지정한 첫 번째 배열입니다 (원하는 키)

예컨대 :

$array = array_keys(array(0 => 'McDonalds', 1 => 'BurgerKing', 2 => 'Taco Bell'), 
    array(0 => 1)); 
$array will only have BurgerKing in it 
한 줄에
+0

+1, 그의 질문 제목은 나를 array_combine에 대해 혼란스럽게 만들었습니다. 잘 했어. – jasonbar

+0

완벽. 정말 고맙습니다! – Michael

+0

@ 마이클 : 천만에요! – BoltClock

-1

array_keys 당신이 첫 번째 인수는 당신의 패스트 푸드 레스토랑의 배열 기본적으로

를 원하는 것을 :

$combined = array(); 

foreach ($array1 as $v) { 
    if (isset($array2[$v])) { 
     $combined[$v] = $array2[$v]; 
    } 
} 

그리고 functional 솔루션 :

+0

$ array = array_keys ($ theKeys, $ fastFood); // 빈 배열이 반환되었습니다. 이 형식이 잘못 되었습니까? – Michael

+0

잘못된 주문, 패스트 푸드, 그 다음 키 –

1
$result = array(); 
foreach (array_flip($keys) as $k) { 
    $result[$k] = $values[$k]; 
} 
0

:

foreach ($a as $v) $c[$v]=$b[$v]; 

참조 :

$a=array(24=>5,26=>4,27=>2); 
$b=array(1=>'McDonalds',2=>'Burger King',3=>'Wendys',4=>'Taco Bell',5=>'Hardees'); 

foreach ($a as $v) $c[$v]=$b[$v]; 

print_r($c); 

그것은 반환

Array 
(
    [5] => Hardees 
    [4] => Taco Bell 
    [2] => Burger King 
) 
관련 문제