(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
array_intersect_assoc — Ermittelt die Schnittmenge von Arrays mit zusätzlicher Indexprüfung
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.
array
Ein Array mit den Hauptwerten, die geprüft werden sollen.
arrays
Arrays zum Vergleichen der Werte.
Gibt ein assoziatives Array zurück, welches alle Werte aus
array
enthält, die auch in allen anderen
Argumenten enthalten sind.
Version | Beschreibung |
---|---|
8.0.0 | Diese Funktion kann jetzt mit nur einem Parameter aufgerufen werden. Zuvor waren mindestens zwei Parameter erforderlich. |
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.
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.
# 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
)