Start · Sprachen · PHP · Referenz · array_intersect_uassoc

array_intersect_uassoc

Funktion

Ermittelt die Schnittmenge mehrerer Arrays, wobei Werte per Standardvergleich und Schlüssel über eine benutzerdefinierte Callback-Funktion verglichen werden.

seit PHP 5.0.0 Kategorie: array

Signatur

array_intersect_uassoc(array $array, array ...$arrays, callable $key_compare_func): array

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

Typ
array
Beschreibung
Gibt ein Array zurück, das alle Schlüssel-Wert-Paare aus $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
Array ( [Apfel] => rot [Banane] => gelb )

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);
Array ( [1] => Alpha [-2] => Beta )

// 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.