2009-11-16 13 views
6

Może mam zamiar szalony, ale mógłbym przysiąc, że istnieje funkcja rdzeń PHP która miała dwie tablice jako argumenty:Nieco prosta tablica PHP skrzyżowanie pytanie

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

i przeprowadza się do skrzyżowania, gdzie wartości z array $a są sprawdzane pod kątem kolizji z kluczami w tablicy $b. Wracając coś

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

Czy taka funkcja istnieje (co brakowało mi w dokumentacji), czy jest tam bardzo zoptymalizowany sposób, aby osiągnąć to samo?

Odpowiedz

10

spróbuj array_flip {przełączniki klawiszy z ich wartościami}, a następnie użyć array_intersect() na przykład:

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

To działałoby dla podanego przykładu, ale nie pozwala na powielanie wartości w $ b. Zrobiłbym odmianę odwracania $ a (ponieważ i tak ma i tak trzymać klucze) i robi 'tablica_intersect_key ($ b, array_flip ($ a))'. –

+0

dobry punkt na duplikatach, nie myślał o tym, że jeden ' – Raz

+6

' array_intersect_key ($ b, array_flip ($ a)) 'okazuje się wykonać zadanie. Twoje zdrowie! –

1

zrobić prosty foreach iteracyjne pierwszej tablicy i uzyskać odpowiednie wartości z drugiej tablicy:

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

Wystarczy odmianą odpowiedź Gumbo, powinny być bardziej skuteczne, jak testy na klawiszach są wykonywane tuż przed wejściem do pętli.

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