Notatki PHP

prywatne zapiski na kamieniu

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