Signatur
Beschreibung
array_intersect_uassoc() gibt ein Array zurück, das alle Einträge enthält, die in $array und in allen weiteren übergebenen Arrays vorkommen – sowohl Wert als auch Schlüssel müssen übereinstimmen. Der Wertevergleich erfolgt intern (wie ==), während die Schlüssel über die angegebene Callback-Funktion verglichen werden.
Die Callback-Funktion muss die gleiche Signatur wie strcmp() haben: Sie erhält zwei Schlüssel und gibt einen negativen Wert zurück, wenn der erste kleiner ist, 0 bei Gleichheit und einen positiven Wert, wenn der erste größer ist. So lässt sich der Schlüsselvergleich vollständig anpassen – z. B. für Groß-/Kleinschreibungs-unempfindliche oder numerisch normalisierte Vergleiche.
Typische Anwendungsfälle sind assoziative Arrays mit benutzerdefinierten Schlüsseln, bei denen die üblichen PHP-Vergleichsregeln nicht ausreichen, etwa bei mehrsprachigen Zeichenkodierungen, Aliases oder case-insensitiven Schlüsseln.
Der letzte Parameter muss stets die Callback-Funktion sein; davor können beliebig viele Arrays angegeben werden. Das Ergebnis-Array behält die Schlüssel des ersten Arrays.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $array Pflicht | array | Das Ausgangs-Array, dessen Elemente auf Vorkommen in allen weiteren Arrays geprüft werden. | |
| $arrays Pflicht | array | Ein oder mehrere weitere Arrays, mit denen verglichen wird. Mindestens ein weiteres Array muss übergeben werden. | |
| $key_compare_func Pflicht | callable | Callback-Funktion zum Vergleich der Schlüssel. Muss zwei Argumente entgegennehmen und einen int zurückgeben: negativ, 0 oder positiv – analog zu strcmp(). |
Rückgabewert
$array enthält, deren Werte und Schlüssel (gemäß Callback) in allen weiteren Arrays vorhanden sind. Die originalen Schlüssel bleiben erhalten. Gibt ein leeres Array zurück, wenn keine Übereinstimmungen gefunden werden.Beispiele
Groß-/Kleinschreibungs-unempfindlicher Schlüsselvergleich
<?php
$array1 = [
'Apfel' => 'rot',
'Banane' => 'gelb',
'Kirsche' => 'dunkelrot',
];
$array2 = [
'apfel' => 'rot',
'BANANE' => 'gelb',
'Pflaume' => 'lila',
];
// Schlüsselvergleich ohne Berücksichtigung der Groß-/Kleinschreibung
$result = array_intersect_uassoc($array1, $array2, 'strcasecmp');
print_r($result);
// Ergebnis: 'Apfel' und 'Banane' stimmen case-insensitiv überein und haben gleiche Werte
Benutzerdefinierter Schlüsselvergleich mit anonymer Funktion
<?php
// Numerische Schlüssel werden nach absolutem Wert verglichen
$array1 = [
1 => 'Alpha',
-2 => 'Beta',
3 => 'Gamma',
];
$array2 = [
1 => 'Alpha',
2 => 'Beta',
4 => 'Delta',
];
$result = array_intersect_uassoc(
$array1,
$array2,
function (int|string $a, int|string $b): int {
// Vergleich nach Absolutwert der Schlüssel
return abs((int)$a) <=> abs((int)$b);
}
);
print_r($result);
// Wichtig · Fallstricke
Parameterreihenfolge: Die Callback-Funktion muss zwingend als letzter Parameter übergeben werden – nach allen zu vergleichenden Arrays. Eine falsche Reihenfolge führt zu einem TypeError bzw. unerwartetem Verhalten.
Wertevergleich: Werte werden nicht über eine Callback-Funktion verglichen, sondern intern als Zeichenketten (loose comparison). Soll auch der Wertevergleich angepasst werden, bietet sich array_uintersect_uassoc() an.
Performance: Bei sehr großen Arrays und rechenintensiven Callbacks kann die Funktion deutlich langsamer sein als eingebaute Vergleichsfunktionen. Für rein numerische oder exakte Schlüsselvergleiche ist array_intersect_assoc() effizienter.