Start · Sprachen · PHP · Referenz · array_intersect_assoc

array_intersect_assoc

Funktion

Ermittelt die Schnittmenge mehrerer Arrays unter Berücksichtigung sowohl der Werte als auch der Schlüssel.

seit PHP 4.3.0 Kategorie: array

Signatur

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

Beschreibung

array_intersect_assoc() vergleicht das erste Array mit allen weiteren übergebenen Arrays und gibt nur jene Schlüssel-Wert-Paare zurück, die in allen Arrays identisch vorkommen – d.h. sowohl der Schlüssel als auch der zugehörige Wert müssen übereinstimmen. Dies unterscheidet die Funktion von array_intersect(), die ausschließlich die Werte vergleicht.

Der Vergleich der Werte erfolgt als String-Vergleich (nicht strikt typisiert). Das bedeutet, dass z. B. 0 und false oder 1 und "1" als gleich angesehen werden können, sofern sie denselben String-Wert ergeben.

Typische Einsatzgebiete sind der Abgleich von assoziativen Datensätzen, etwa beim Vergleich von Formularfeldern mit Standardwerten, beim Synchronisieren von Konfigurationsarrays oder beim Filtern von Datenbankzeilen auf exakte Übereinstimmung von Spaltenname und Wert.

Die Rückgabe behält Schlüssel und Reihenfolge aus dem ersten Array bei. Wurde keine Übereinstimmung gefunden, wird ein leeres Array zurückgegeben.

Parameter

Name Typ Default Beschreibung
$array Pflicht array Das Basis-Array, dessen Schlüssel-Wert-Paare mit den weiteren Arrays verglichen werden.
$arrays Pflicht array Ein oder mehrere Arrays, mit denen das Basis-Array verglichen wird. Mindestens ein weiteres Array ist erforderlich.

Rückgabewert

Typ
array
Beschreibung
Gibt ein Array zurück, das alle Schlüssel-Wert-Paare enthält, die sowohl im ersten als auch in allen weiteren Arrays vorhanden sind. Die Schlüssel aus dem ersten Array bleiben erhalten. Bei keiner Übereinstimmung wird ein leeres Array zurückgegeben.

Beispiele

Einfacher Vergleich zweier assoziativer Arrays

<?php
$a = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
$b = ['a' => 1, 'b' => 7, 'c' => 3, 'e' => 4];

$result = array_intersect_assoc($a, $b);
print_r($result);
Array ( [a] => 1 [c] => 3 )

Unterschied zu array_intersect – Schlüssel zählen mit

<?php
$a = ['x' => 'Apfel', 'y' => 'Birne'];
$b = ['y' => 'Apfel', 'x' => 'Birne'];

// array_intersect: nur Werte, ignoriert Schlüssel
$nurWerte = array_intersect($a, $b);
print_r($nurWerte);

// array_intersect_assoc: Schlüssel UND Werte müssen passen
$mitSchluessel = array_intersect_assoc($a, $b);
print_r($mitSchluessel);
Array ( [x] => Apfel [y] => Birne ) Array ( )

Abgleich von Konfigurationswerten über drei Arrays

<?php
$default  = ['debug' => '0', 'lang' => 'de', 'tz' => 'Europe/Berlin'];
$config1  = ['debug' => '0', 'lang' => 'de', 'tz' => 'UTC'];
$config2  = ['debug' => '0', 'lang' => 'de', 'tz' => 'Europe/Berlin', 'extra' => 'x'];

// Nur Einstellungen, die in allen drei identisch sind:
$gemeinsam = array_intersect_assoc($default, $config1, $config2);
print_r($gemeinsam);
Array ( [debug] => 0 [lang] => de )

// Wichtig · Fallstricke

Typverhalten: Da die Werte intern als Strings verglichen werden, können lose Typ-Gleichheiten auftreten. Wer einen strikten Typenvergleich benötigt, muss eine eigene Implementierung mit array_uintersect_assoc() und einem eigenen Callback verwenden.

Numerische Schlüssel: Die Funktion berücksichtigt bei numerisch indizierten Arrays ebenfalls die genaue Position (Index), weshalb sie sich für rein numerische Arrays selten sinnvoll einsetzen lässt – hier ist array_intersect() in der Regel die bessere Wahl.

Mindestens zwei Arrays erforderlich: Wird nur ein Array übergeben, erzeugt PHP seit PHP 8.0 einen ValueError; in älteren Versionen eine Warnung.