2011-01-13 108 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,但沒有運氣。

回答

7

這裏有一個簡單imperative解決方案:

$combined = array(); 

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

並有functional解決方案:

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

+1,他的問題標題讓我對array_combine感到困惑。好決定。 – jasonbar 2011-01-13 22:46:36

+0

完美。非常感謝! – Michael 2011-01-13 22:52:23

-1

array_keys你想要做什麼本身

第一個參數是你的快餐店數組,第二個參數是你給出的第一個數組(你想要的鍵)

e.g:

$array = array_keys(array(0 => 'McDonalds', 1 => 'BurgerKing', 2 => 'Taco Bell'), 
    array(0 => 1)); 
$array will only have BurgerKing in it 
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 
) 
相關問題