2009-11-16 19 views
6

Tal vez estoy volviendo loco, pero podría haber jurado que había una función básica de PHP que tuvo dos matrices como argumentos:Algo simple pregunta matriz PHP intersección

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

y realiza una intersección donde los valores de matriz $a se comprueban las colisiones con las teclas en la matriz $b. Volviendo algo así como

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

¿Existe una función de este tipo (que echaba de menos en la documentación), o hay una forma muy optimizada para lograr la misma cosa?

Respuesta

10

tratar de usar array_flip {cambia las claves con sus valores} y luego usar array_intersect() en su ejemplo:

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

Esto funcionaría para el ejemplo dado, pero no permite valores duplicados en $ b. Haría la variación de invertir $ a (como se supone que debe mantener las teclas) y hacer 'array_intersect_key ($ b, array_flip ($ a))'. –

+0

buen punto en los duplicados, no pensé en eso – Raz

+6

'array_intersect_key ($ b, array_flip ($ a))' resulta para hacer el trabajo. ¡Aclamaciones! –

1

hacer una simple foreach para recorrer la primera matriz y obtener los valores correspondientes de la segunda matriz:

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

sólo una variación de la respuesta Gumbo, debería ser más eficientes a medida que se realizan las pruebas en las teclas justo antes de ingresar al ciclo.

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