2012-02-24 9 views
8

Mam tablicę, która wygląda tak:array_intersect, ale sub-macierzy z jednej tablicy zmiennej

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

będę odnosić się do $foo[0], $foo[1] i $foo[2] jako sub-macierzy.

Zasadniczo muszę wykonać array_intersect() we wszystkich 3 pod-tablicach w $foo. Wynik powinien być następujący:

array('b', 'd') 

Ponieważ wszystkie trzy podaramery mają te wspólne wartości. Jaki jest najlepszy sposób na zrobienie tego?

Kilka uwag:

  • Zawsze znajdzie się przynajmniej jeden sub-macierzy. Brak górnego limitu.
  • Jeżeli tylko jeden Sub-macierz jest, należy zwrócić że niższa tablicę
  • Jeżeli nie ma żadnych wspólnych dla wszystkich sub-macierzy, pusta tablica należy odesłać
  • Jeśli już Funkcjonalność istnieje jako funkcji PHP, będę/facepalm
+1

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

Odpowiedz

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

Zauważ, że klawisze są zachowane z foo $ [0]

+4

Clev Podejdź, podoba mi się! Działa to dobrze, jeśli '$ foo' ma co najmniej 2 pod-tablice, ale kończy się niepowodzeniem, jeśli istnieje tylko jeden. Naprawiłem to, dzwoniąc do powyższego, jeśli 'count ($ foo)> 1'. Jeśli 'count ($ foo) == 1' właśnie zwrócę jedyną pod-tablicę. Dzięki! –

+0

Dziękujemy @ ColinO'Dell '$ currency = count ($ currencies)> 1? call_user_func_array ('array_intersect', $ currencies): array_shift ($ currencies); ' ** UWAGA: ** Jestem typecasting (tablica) na walutach $ tak, aby array_shift zwróciło' [] '. – Michael

Powiązane problemy