2012-02-24 9 views
8

devo una matrice che assomiglia a questo:array_intersect, ma per un sub-array di un singolo array variabile

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

mi riferirò $foo[0], $foo[1], e $foo[2] come sub-array.

Fondamentalmente è necessario eseguire uno array_intersect() in tutti i 3 sub-array in $foo. Il risultato dovrebbe essere:

array('b', 'd') 

Poiché tutti e tre i sotto-array avevano questi valori in comune. Qual è il modo migliore per farlo?

Alcune considerazioni:

  • Ci sarà sempre almeno un sub-array. Nessun limite superiore.
  • Se viene fornito un solo sub-array, dovrebbe restituire che sub-array
  • Se non ci sono valori comuni di tutte le sub-array, un array vuoto deve essere restituito
  • Se questa funzionalità già esiste come una funzione PHP, io/facepalm
+1

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

risposta

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

Nota che le chiavi sono conservate da $ foo [0]

+4

Clev approccio er, mi piace! Funziona bene se '$ pippo' ha almeno 2 sotto-array, ma fallisce se ce n'è uno solo. Ho risolto il problema chiamando solo il precedente se 'count ($ pippo)> 1'. Se 'count ($ pippo) == 1' restituisco solo l'unico sotto-array. Grazie! –

+0

Grazie @ ColinO'Dell '$ valute = conto ($ valute)> 1? call_user_func_array ('array_intersect', $ valute): array_shift ($ valute); ' ** NOTA: ** Sto typecasting (array) su $ valute in modo che array_shift restituisca' [] '. – Michael

Problemi correlati