array_intersect_assoc - wylicza część wspólną tablic z dodatkowym sprawdzaniem indeksów.
array array_intersect_assoc ( array $tablica1 , array $tablica2 [, array $ ... ] )
array_intersect_assoc() zwraca tablicę zawierającą wszystkie wartości z $tablica1, które są obecne także we wszystkich pozostałych argumentach. Należy pamiętać, że w przeciwieństwie do funkcji array_intersect(), tutaj brane są pod uwagę także klucze.
$tablica1 = array("a" => "zielony", "b" => "brązowy", "c" => "niebieski", "czerwony"); $tablica2 = array("a" => "zielony", "żółty", "czerwony"); $tablica_wynikowa = array_intersect_assoc($tablica1, $tablica2); print_r($tablica_wynikowa);
Otrzymamy część wspólną obu tablic:
Array ( [a] => zielony )
W powyższym przykładzie, tylko jedna para, "a" => "zielony, jest obecna w obu tablicach wejściowych, a więc tylko ta zostanie zwrócona. Wartość "czerwony" nie jest zwracana, ponieważ w tablicy $tablica1 jej klucz to 0, a w $tablica2 - 1.
Dwie wartości z pary klucz => wartość są uważane za równe tylko jeśli (string) $element1 === (string) $element2. Innymi słowy, dokonywane jest ścisłe porównywanie typów, tak więc reprezentacje znakowe muszą być takie same.
Inna funkcja - część wspólna dwóch tablic:
function arrayIntersect( $primary_array, $secondary_array ) { if ( !is_array( $primary_array ) || !is_array( $secondary_array ) ) { return false; } if ( !empty( $primary_array ) ) { foreach( $primary_array as $key => $value ) { if ( !isset( $secondary_array[$key] ) ) { unset( $primary_array[$key] ); } else { if ( serialize( $secondary_array[$key] ) != serialize( $value ) ) { unset( $primary_array[$key] ); } } } return $primary_array; } else { return array(); } }
$tablica1 = array("a" => "zielony", "b" => "brązowy", "c" => "niebieski", "czerwony"); $tablica2 = array("a" => "zielony", "żółty", "czerwony"); $c = arrayIntersect($tablica1, $tablica2); var_dump($c);
array (1) a => "zielony" (7)
Poszukiwanie identycznych kluczy w tablicach:
function array_key_intersect(&$a, &$b) { $array = array(); while (list($key,$value) = each($a)) { if (isset($b[$key])) $array[$key] = $value; } return $array; } $tablica1 = ['apples' => 1, 'oranges' => 2, 'turtles' => null, 'bananas'=>4]; $tablica2 = ['apples' => 1, 'turtles' => 11, 'eggs'=>12]; $c = array_key_intersect($tablica1, $tablica2); var_dump($c); bdump($c);
zwróci klucze wspólne dla obu tablic:
array (2) apples => 1 turtles => null