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.
array_intersect_assoc
(PHP 4 >= 4.3.0, PHP 5)
array_intersect_assoc — Calcule l'intersection de deux tableaux avec des tests sur les index
Description
$array1
, array $array2
[, array $ ...
] )
array_intersect_assoc() retourne un tableau contenant
toutes les valeurs de array1 qui sont aussi
présentes dans tous les autres arguments array2,
..., etc. Notez que les clés sont utilisées
durant la comparaison, contrairement à array_intersect().
Liste de paramètres
-
array1 -
Le tableau avec les valeurs maîtres à vérifier.
-
array2 -
Un tableau contenant les valeurs à comparer.
-
array -
Une liste variable de tableaux à comparer.
Valeurs de retour
Retourne un tableau associatif contenant toutes les valeurs du
tableau array1 qui sont présentes dans
tous les arguments.
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" => "vert" est présente dans les deux tableaux, et donc placée dans le dernier tableau. La valeur rouge 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 indexes des deux tableaux en utilisant une fonction de rappel
- 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
# 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
)
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;
}
?>
A method to find intersection of two or more arrays when comparison is based only on keys
array_uintersect_assoc($array1 , $array2 [, $ array... ], create_function(null, "return 0;"));
This returns an associative array containing all the keys in array1 that are present in all of the arguments.
A function to find intersection of two arrays when comparison is based on only 1 key
function array_common($array1,$array2,$compareString) {
if (!is_array($array1) || !is_array($array2)) {
return false;
}
$arrResult = array();
foreach ($array1 as $arrInsideArray1) {
foreach ($array2 as $arrInsideArray2) {
$found=false;
if ($arrInsideArray1[$compareString]==$arrInsideArray2[$compareString]) {
$found=true;
break;
}
}
if ($found) {
array_push($arrResult,$arrInsideArray1);
}
}
return $arrResult;
}
A combination of the two functions [array_intersect() and array_intersect_assoc()] in order to obtain the intersection of two multidimensional arrays.
<?php
function array_intersect_assoc_recursive(&$arr1, &$arr2) {
if (!is_array($arr1) || !is_array($arr2)) {
return $arr1 == $arr2; // or === for strict type
}
$commonkeys = array_intersect(array_keys($arr1), array_keys($arr2));
$ret = array();
foreach ($commonkeys as $key) {
$ret[$key] =& array_intersect_assoc_recursive($arr1[$key], $arr2[$key]);
}
return $ret;
}
?>
