array_intersect_assoc

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

array_intersect_assocCalcule l'intersection de deux tableaux avec des tests sur les index

Description

array_intersect_assoc(array $array, array ...$arrays): array

array_intersect_assoc() retourne un tableau contenant toutes les valeurs de array qui sont aussi présentes dans tous les autres arguments. Notez que les clés sont aussi utilisées durant la comparaison, contrairement à array_intersect().

Liste de paramètres

array

Le tableau avec les valeurs maîtres à vérifier.

arrays

Tableaux à comparer contre

Valeurs de retour

Retourne un tableau associatif contenant toutes les valeurs du tableau array qui sont présentes dans tous les arguments.

Historique

Version Description
8.0.0 Cette fonction peut désormais être appelée avec un seul paramètre. Auparavant, au moins deux paramètres étaient nécessaires.

Exemples

Exemple #1 Exemple avec 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);
?>

L'exemple ci-dessus va afficher :

Array
(
    [a] => green
)

Dans notre exemple, vous pouvez voir que la paire "a" => "green" est présente dans les deux tableaux, et donc placée dans le dernier tableau. La valeur red n'est pas retournée car dans $array1 son index est 0 tandis que dans le tableau $array2, son index est 1, et la clé "b" n'est pas retourné, car sa valeur est différente dans chaque tableau.

Les deux valeurs de la paire clé => valeur sont considérées égales uniquement si (string) $elem1 === (string) $elem2. En d'autres termes, une comparaison stricte est faite sur les représentations des index, avec le type chaîne.

Voir aussi

  • array_intersect() - Calcule l'intersection de tableaux
  • array_uintersect_assoc() - Calcule l'intersection de deux tableaux avec des tests sur l'index, compare les données en utilisant une fonction de rappel
  • array_intersect_uassoc() - Calcule l'intersection de deux tableaux avec des tests sur les index, compare les index en utilisant une fonction de rappel
  • array_uintersect_uassoc() - Calcule l'intersection de deux tableaux avec des tests sur l'index, compare les données et les index des deux tableaux en utilisant une fonction de rappel séparée
  • array_diff() - Calcule la différence entre des tableaux
  • array_diff_assoc() - Calcule la différence de deux tableaux, en prenant aussi en compte les clés
add a note add a note

User Contributed Notes 4 notes

up
6
Whitend
12 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
4
vandor at progressive dot hu
20 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
-5
StR: str at strgt dot cjb dot net
19 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;
}
?>
up
-7
Jim Yaghi
7 years ago
Remember, null values will be interpreted as, "key does not exist." eg,

$a = ['apples' => 1, 'oranges' => 2, 'turtles' => null, 'bananas'=>4];
$b = ['apples'=>10, 'turtles' => 11, 'eggs'=>12];
$c = array_intersect_assoc($b,$a);

You might have expected $c to contain:

['oranges' => 10, 'turtles' => 11]

In fact, 'turtles' has a null value in the $a array, therefore the $c array contains only:

['oranges' => 10]

Something to keep in mind if using array_intersect_assoc to filter valid entries, eg in a mySQL insertion pre-processing or nerdy API that doesn't like extra params.
To Top