2011-01-13 5 views
3

Ich habe zwei Arrays, die ich kombinieren möchte. Ich muss die Werte aus dem ersten Array nehmen, diese Werte als Schlüssel für das zweite Array verwenden und sie zu einem dritten Array kombinieren (das, das ich verwenden werde).PHP, kombinieren zwei Arrays zu einem neuen Array, mit den ersten Array-Werte als Schlüssel

Mit anderen Worten, ich habe diese erste Reihe:

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

Das zweite Array Ich habe:

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

Und schließlich, das ist das Array ich haben will:

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

Scheint einfach, aber ich kann es nicht herausfinden. Ich habe verschiedene Array-Funktionen, wie array_intersect_key, ohne Glück versucht.

Antwort

7

Hier ist eine einfache imperative Lösung:

$combined = array(); 

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

Und eine functional Lösung:

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

+1, verwirrte mich sein Fragetitel über array_combine. Guter Ruf. – jasonbar

+0

Perfekt. Ich danke dir sehr! – Michael

+0

@Michael: Gern geschehen! – BoltClock

-1

array_keys tut, was wollen Sie nativ

Das erste Argument ist die Anordnung des Fast-Food-Restaurants Das zweite Argument ist das erste Array, das Sie angegeben haben (die gewünschten Schlüssel)

z:

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

$ array = array_keys ($ theKeys, $ fastFood); // Dies hat ein leeres Array zurückgegeben. Ist dieses Format falsch? – Michael

+0

falsche Reihenfolge, Fast Food, dann die Schlüssel –

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

In nur einer Zeile:

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

See:

$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); 

Es gibt:

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