PHP Unconference Europe 2015

array_intersect_assoc

(PHP 4 >= 4.3.0, PHP 5)

array_intersect_assocCalcula la intersección de arrays con un chequeo adicional de índices

Descripción

array array_intersect_assoc ( array $array1 , array $array2 [, array $... ] )

array_intersect_assoc() devuelve un array que contiene todos los valores de array1 que están presentes en todos los arguementos. Observe que las claves se usan en la comparación, a diferencia de array_intersect().

Parámetros

array1

Array con los valores maestros para verificar.

array2

Un array con el que comparar los valores.

...

Una lista variable de arrays para comparar.

Valores devueltos

Devuelve un array asociativo que contiene todos los valores de array1 que están presentes en todos los argumentos.

Ejemplos

Ejemplo #1 Ejemplo de array_intersect_assoc()

<?php
$array1 
= array("a" => "green""b" => "brown""c" => "blue""red");
$array2 = array("a" => "green""b" => "yellow""blue""red");
$result_array array_intersect_assoc($array1$array2);
print_r($result_array);
?>

El resultado del ejemplo sería:

Array
(
    [a] => green
)

En el ejemplo se ve que sólo el par "a" => "green" está presente en ambos arrays, por lo que es devuelto. El valor "red" no es devuelto porque en $array1 su clave es 0 mientras que la clave de "red" en $array2 es 1; la clave "b" no es devuelta debido a que sus valores son diferentes en cada array.

Los dos valores del par clave => valor son considerados iguales sólo si (string) $elem1 === (string) $elem2 . En otras palabras, se ejecuta una verificación estricta de tipos, por lo que la representación del string debe ser la misma.

Ver también

  • array_intersect() - Calcula la intersección de arrays
  • array_uintersect_assoc() - Calcula la intersección de arrays con una comprobación de índices adicional, compara la información mediante una función de retrollamada
  • array_intersect_uassoc() - Calcula la intersección de arrays con un chequeo adicional de índices que se realiza por una función de devolución de llamada
  • array_uintersect_uassoc() - Calcula la intersección de arrays con una comprobación de índices adicional, compara la información y los índices mediante funciones de retrollamada
  • array_diff() - Calcula la diferencia entre arrays
  • array_diff_assoc() - Calcula la diferencia entre arrays con un chequeo adicional de índices
add a note add a note

User Contributed Notes 3 notes

up
2
vandor at progressive dot hu
9 years ago
# ket tomb kulcs alapu metszetet szamitja ki, az erteken is ellenorzest vegez
#
# calculating (key base) intersection of arrays (value are checked)
# use: $result_array = array_intersect_assoc($a1, $a2, $a3,..);
#
##
# original code by [jochem at iamjochem dawt com] : array_diff_keys()

<?php
function array_intersect_assoc() {

   
$args = func_get_args();
   
$res = $args[0];

    for (
$i=1;$i<count($args);$i++) {
        if (!
is_array($args[$i])) {continue;}

        foreach (
$res as $key => $data) {
            if ( (!
array_key_exists($key, $args[$i])) || ( (isset($args[$i][$key])) && ($args[$i][$key] !== $res[$key]) ) ) {
                unset(
$res[$key]);
            }
        }
    }

    return
$res;
}

?>

<?php
$array1
= array("a"=>"green", "b"=>"brown", "c"=>"blue", "red");
$array2 = array("a"=>"green", "b"=>"yellow", "c"=>"yellow", "red");
$a = array('a'=>'green', 'b'=>'brown', 'c'=>'yellow');
$b = array('a'=>'green', 'b'=>'brown', 'c'=>'yellow', 'e'=>'yellow');

$result_array = array_intersect_assoc($a, $b, $array1, $array2);
?>

$args array will look like:

(
    0 =>
        (
            a => green
            b => brown
            c => yellow
        )

    1 =>
        (
            a => green
            b => brown
            c => yellow
            e => yellow
        )

    2 =>
        (
            a => green
            b => brown
            c => blue
            0 => red
        )

    3 =>
        (
            a => green
            b => yellow
            c => yellow
            0 => red
        )

)

$result_array will look like:

(
    a => green
)
up
0
Whitend
2 years ago
One of the ways to get intersection of two arrays is as follows:

<?php
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();
    }
   
}
?>

It would pay attention to both keys and values even if values would be arrays as well. One important note is that if value of $primary_array is yet another array, its order of key & value pairs becomes important for matching.
up
0
StR: str at strgt dot cjb dot net
9 years ago
To find the keys that are in 2 arrays, without caring of the values:

This is a function i needed, and it also returns the values of the first array

<?php
function array_key_intersect(&$a, &$b) {
 
$array = array();
  while (list(
$key,$value) = each($a)) {
    if (isset(
$b[$key]))
     
$array[$key] = $value;
  }
  return
$array;
}
?>
To Top