array_intersect_assoc

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

array_intersect_assocErmittelt die Schnittmenge von Arrays mit zusätzlicher Indexprüfung

Beschreibung

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

array_intersect_assoc() gibt ein Array mit allen Werten von array zurück, die auch in allen anderen Argumenten enthalten sind. Es ist zu beachten, dass, anders als bei array_intersect(), auch die Schlüssel zum Vergleich herangezogen werden.

Parameter-Liste

array

Ein Array mit den Hauptwerten, die geprüft werden sollen.

arrays

Arrays zum Vergleichen der Werte.

Rückgabewerte

Gibt ein assoziatives Array zurück, welches alle Werte aus array enthält, die auch in allen anderen Argumenten enthalten sind.

Changelog

Version Beschreibung
8.0.0 Diese Funktion kann jetzt mit nur einem Parameter aufgerufen werden. Zuvor waren mindestens zwei Parameter erforderlich.

Beispiele

Beispiel #1 array_intersect_assoc()-Beispiel

<?php
$array1
= array("a" => "grün", "b" => "braun", "c" => "blau", "rot");
$array2 = array("a" => "grün", "b"=>"gelb", "blau", "rot");
$ergebnis_array = array_intersect_assoc($array1, $array2);
print_r($ergebnis_array);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
    [a] => grün
)

In unserem Beispiel ist zu sehen, dass einzig das Paar "a" => "green" in beiden Arrays enthalten ist und daher zurückgegeben wird. Der Wert "rot" wird nicht zurückgegeben, weil sein Schlüsselwert in $array1 0 ist, wohingegen der Schlüssel von "rot" in $array2 den Wert 1 hat. Der Schlüssel "b" wird nicht zurückgegeben, weil er in beiden Arrays einen anderen Wert hat.

Die beiden Werte der Schlüssel => Wert-Paare werden genau dann als gleich erachtet, wenn (string) $elem1 === (string) $elem2 . Anders ausgedrückt wird eine strikte Typenprüfung durchgeführt, sodass die String-Darstellung gleich sein muss.

Siehe auch

  • array_intersect() - Ermittelt die Schnittmenge von Arrays
  • array_uintersect_assoc() - Ermittelt die Schnittmenge von Arrays mit zusätzlicher Indexprüfung, vergleicht Daten mittels einer Callbackfunktion
  • array_intersect_uassoc() - Ermittelt die Schnittmenge von Arrays mit Indexprüfung; vergleicht Indizes mit einer Callbackfunktion
  • array_uintersect_uassoc() - Ermittelt die Schnittmenge von Arrays mit zusätzlicher Indexprüfung, vergleicht Daten und Schlüssel mittels separaten Callbackfunktionen
  • array_diff() - Ermittelt die Unterschiede zwischen Arrays
  • array_diff_assoc() - Berechnet den Unterschied zwischen Arrays mit zusätzlicher Indexprüfung
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