2009-11-16 9 views
6

Vielleicht verrückt Ich werde, aber ich hätte schwören können, dass es eine PHP-Core-Funktion war, die als Argumente zwei Arrays nahm:Etwas einfaches PHP-Array-Kreuzung Frage

$a = array('1', '3'); 
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis'); 

Und eine Kreuzung führt, wo die Werte von Das Array $a wird auf Kollisionen mit den Schlüsseln im Array $b überprüft. Wiederkehrende etwas wie

array('1'=>'apples', '3'=>'kiwis'); 

Ist eine solche Funktion vorhanden sind (was ich in der Dokumentation verpasst), oder gibt es eine sehr optimierte Art und Weise, das Gleiche zu erreichen?

Antwort

10

Versuchen Sie es mit array_flip {Schalter Tasten mit ihren Werten} und verwenden Sie dann array_intersect() auf Ihrem Beispiel:

$c = array_flip($b); // so you have your original b-array 
$intersect = array_intersect($a,c); 
+1

Dies würde für das angegebene Beispiel funktionieren, aber doppelte Werte in $ b nicht zulassen. Ich würde die Variante machen, $ a umzudrehen (da es sowieso Schlüssel halten soll) und 'array_intersect_key ($ b, array_flip ($ a))'. –

+0

guter Punkt auf die Duplikate, dachte nicht an diese – Raz

+6

'array_intersect_key ($ b, array_flip ($ a))' stellt sich heraus, um die Aufgabe zu erledigen. Prost! –

1

ein einfaches foreach Sie das erste Array zu durchlaufen und die entsprechenden Werte aus der zweiten Reihe erhalten:

$output = array(); 
foreach ($a as $key) { 
    if (array_key_exists($key, $b)) { 
     $output[$key] = $b[$key]; 
    } 
} 
0

Nur eine Variation der Antwort Gumbo, sollte effizienter sein als die Tests auf den Tasten ausgeführt werden kurz bevor Sie die Schleife betreten.

$intersection = array_intersect($a, array_keys($b)); 
$result=array(); 
foreach ($intersection as $key) { 
    $result[$k]=$b[$k]; 
}