2011-01-13 80 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 
) 
相关问题