2012-02-24 10 views
8

tengo una matriz que tiene este aspecto:array_intersect, pero para una sub-matrices de una sola matriz de variables

$foo = array(
    0 => array('a', 'b', 'c', 'd'), 
    1 => array('b', 'c', 'd'), 
    2 => array('b', 'd', 'f') 
) 

me referiré a $foo[0], $foo[1] y $foo[2] como sub-arrays.

Básicamente necesito realizar un array_intersect() en las 3 sub-matrices en $foo. El resultado debería ser:

array('b', 'd') 

Como las tres sub-matrices tenían estos valores en común. ¿Cuál es la mejor manera de hacer esto?

Algunas consideraciones:

  • Siempre habrá al menos una sub-matriz. Sin límite superior.
  • Si sólo se proporciona un sub-conjunto, debe devolver ese sub-array
  • Si no hay valores comunes en todas las sub-matrices, una matriz vacía debe ser devuelto
  • Si esta funcionalidad ya existe como una función de PHP, lo haré/facepalm
+1

salida http://stackoverflow.com/questions/4704166/comparing-multidimensional -array –

Respuesta

23
$intersect = call_user_func_array('array_intersect',$foo); 

: las llaves se conservan desde $ foo [0]

+4

Clev er enfoque, me gusta! Funciona bien si '$ foo' tiene al menos 2 sub-arrays, pero falla si solo hay uno. Lo arreglé solo llamando al anterior si 'count ($ foo)> 1'. Si 'count ($ foo) == 1' simplemente devuelvo la única sub-matriz. ¡Gracias! –

+0

Gracias @ ColinO'Dell '$ monedas = contador ($ monedas)> 1? call_user_func_array ('array_intersect', $ monedas): array_shift ($ monedas); ' ** NOTA: ** Estoy encasillado (matriz) en $ monedas para que array_shift devuelva' [] '. – Michael

Cuestiones relacionadas