Signatur
Beschreibung
array_intersect_ukey() vergleicht die Schlüssel des ersten Arrays mit den Schlüsseln aller weiteren Arrays mithilfe einer benutzerdefinierten Vergleichsfunktion. Zurückgegeben werden alle Schlüssel-Wert-Paare aus dem ersten Array, deren Schlüssel (laut der Callback-Funktion) in jedem der übrigen Arrays ebenfalls vorhanden sind. Die Werte spielen dabei keine Rolle.
Die Callback-Funktion muss das gleiche Verhalten wie ein Standard-Komparator haben: Sie erhält zwei Schlüssel als Argumente und soll eine negative Zahl zurückgeben, wenn das erste Argument kleiner als das zweite ist, 0 bei Gleichheit und eine positive Zahl, wenn das erste Argument größer ist. Dies entspricht der Signatur callback(mixed $a, mixed $b): int.
Die Funktion ist besonders nützlich, wenn Schlüssel nicht nach Standardregeln (z. B. case-insensitive oder normalisiert) verglichen werden sollen, sondern eine eigene Logik erforderlich ist. Im Gegensatz zu array_intersect_key() lässt sich so das Vergleichsverhalten vollständig anpassen.
Der letzte Parameter muss immer die Callback-Funktion sein; davor können beliebig viele Arrays übergeben werden. Es muss mindestens ein weiteres Array (zusätzlich zum ersten) und die Callback-Funktion angegeben werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $array Pflicht | array | Das Ausgangs-Array, dessen Schlüssel-Wert-Paare gefiltert werden. | |
| $arrays Pflicht | array | Ein oder mehrere weitere Arrays, gegen die die Schlüssel des ersten Arrays geprüft werden. | |
| $key_compare_func Pflicht | callable | Vergleichsfunktion mit der Signatur callback(mixed $a, mixed $b): int. Gibt einen negativen Wert zurück, wenn $a < $b, 0 bei Gleichheit und einen positiven Wert, wenn $a > $b. |
Rückgabewert
Beispiele
Einfacher Schlüsselvergleich mit Standardkomparator
<?php
$array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
$array2 = ['a' => 10, 'c' => 30, 'e' => 50];
$result = array_intersect_ukey($array1, $array2, function (string $a, string $b): int {
return strcmp($a, $b);
});
print_r($result);
Groß-/Kleinschreibung ignorieren beim Schlüsselvergleich
<?php
$produkteLager = ['Apfel' => 50, 'Birne' => 30, 'Kirsche' => 20];
$bestellungen = ['apfel' => 5, 'KIRSCHE' => 3, 'Mango' => 7];
// Schlüssel case-insensitiv vergleichen
$result = array_intersect_ukey(
$produkteLager,
$bestellungen,
fn(string $a, string $b) => strcasecmp($a, $b)
);
print_r($result);
Schnittmenge über drei Arrays
<?php
$a = ['x' => 1, 'y' => 2, 'z' => 3];
$b = ['x' => 9, 'y' => 8];
$c = ['y' => 7, 'z' => 6];
// Nur Schlüssel, die in allen drei Arrays vorkommen
$result = array_intersect_ukey($a, $b, $c, 'strcmp');
print_r($result);
// Wichtig · Fallstricke
Reihenfolge der Parameter: Die Callback-Funktion muss zwingend als letztes Argument übergeben werden. Wird sie an einer anderen Position übergeben, führt dies zu einem Fehler oder unerwarteten Ergebnissen.
Nur Schlüssel werden verglichen: Die Werte der Arrays haben keinen Einfluss auf das Ergebnis. Sollen sowohl Schlüssel als auch Werte verglichen werden, sollte array_intersect_uassoc() verwendet werden.
Konsistenz der Callback-Funktion: Die Vergleichsfunktion muss konsistent und transitiv sein. Inkonsistentes Verhalten führt zu undefinierten Ergebnissen, da der interne Sortier- und Vergleichs-Algorithmus auf diese Eigenschaft angewiesen ist.