Signatur
Beschreibung
array_diff_assoc() vergleicht das erste Array mit einem oder mehreren weiteren Arrays und gibt alle Einträge zurück, die im ersten Array vorhanden sind, aber in keinem der anderen Arrays mit identischem Schlüssel-Wert-Paar vorkommen. Damit unterscheidet sich die Funktion von array_diff(), die nur die Werte vergleicht und Schlüssel ignoriert.
Die Vergleiche werden als lose Typvergleiche (==) für Werte und als strikte Schlüsselvergleiche durchgeführt. Ein Eintrag wird im Ergebnis beibehalten, wenn entweder sein Schlüssel im Vergleichs-Array nicht existiert oder der zugehörige Wert sich unterscheidet.
Typische Anwendungsfälle sind das Erkennen von Änderungen in assoziativen Datensätzen, z. B. beim Vergleich einer gespeicherten Konfiguration mit einer neuen Version, oder beim Ermitteln, welche Felder eines Formulars sich seit dem letzten Speichervorgang verändert haben.
Die Schlüssel werden im Rückgabe-Array beibehalten. Numerisch indizierte Arrays funktionieren ebenfalls, wobei dann auch die numerischen Indizes in den Vergleich einfließen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $array Pflicht | array | Das Ausgangs-Array, dessen Einträge auf Unterschiede geprüft werden. | |
| $arrays Pflicht | array | Ein oder mehrere Vergleichs-Arrays. Alle Schlüssel-Wert-Paare des Ausgangs-Arrays werden gegen diese Arrays geprüft. |
Rückgabewert
Beispiele
Einfacher assoziativer Vergleich
<?php
$config_alt = [
'host' => 'localhost',
'port' => 3306,
'charset' => 'utf8',
'debug' => false,
];
$config_neu = [
'host' => 'localhost',
'port' => 5432,
'charset' => 'utf8mb4',
'debug' => false,
];
$geaendert = array_diff_assoc($config_neu, $config_alt);
print_r($geaendert);
Unterschied bei numerischen Indizes
<?php
// Numerische Arrays: Indizes werden ebenfalls verglichen
$a = [0 => 'Apfel', 1 => 'Banane', 2 => 'Kirsche'];
$b = [0 => 'Apfel', 1 => 'Mango', 2 => 'Kirsche'];
$diff = array_diff_assoc($a, $b);
print_r($diff);
// Nur Index 1 unterscheidet sich im Wert
Vergleich mit mehreren Arrays
<?php
$original = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
$version1 = ['a' => 1, 'b' => 9, 'c' => 3];
$version2 = ['d' => 4, 'e' => 5];
// Einträge, die weder in $version1 noch in $version2 mit gleichem Schlüssel+Wert stehen
$diff = array_diff_assoc($original, $version1, $version2);
print_r($diff);
// Wichtig · Fallstricke
Typvergleich: Werte werden mit dem nicht-strikten ==-Operator verglichen, Schlüssel hingegen typgenau. Das bedeutet, dass 0 und false als Werte als gleich gelten können. Wenn striktes Verhalten benötigt wird, sollte eine eigene Vergleichsfunktion mit array_diff_uassoc() implementiert werden.
Richtung beachten: Die Funktion ist nicht symmetrisch — array_diff_assoc($a, $b) liefert andere Ergebnisse als array_diff_assoc($b, $a). Für einen vollständigen bidirektionalen Vergleich müssen beide Richtungen ausgewertet werden.
Große Arrays: Bei sehr großen Arrays kann der Vergleich ressourcenintensiv sein, da jedes Schlüssel-Wert-Paar des ersten Arrays gegen alle Vergleichs-Arrays geprüft wird.