W3docs

Die PHP-Funktion array_intersect_uassoc() verstehen

Erfahren Sie, wie array_intersect_uassoc() in PHP Schnittmengen mit benutzerdefinierten Schlüsselvergleichen berechnet – inkl. Beispiel.

array_intersect_uassoc() berechnet die Schnittmenge von zwei oder mehr Arrays – sie gibt die Einträge des ersten Arrays zurück, deren Wert UND Schlüssel auch in jedem anderen Array vorkommen. Das Besondere an dieser Variante ist das u im Namen: Sie übergeben einen benutzerdefinierten Callback, der entscheidet, wann zwei Schlüssel als gleich gelten. Werte werden weiterhin mit PHPs eingebautem (lockerem, string-basiertem) Vergleich geprüft.

Diese Seite erklärt, wie die Funktion funktioniert, führt durch ein verifiziertes Beispiel und zeigt, wann sie anstelle der anderen array_intersect_*-Varianten eingesetzt werden sollte.

Syntax

array_intersect_uassoc(
    array $array,
    array ...$arrays,
    callable $key_compare_func
): array
  • $array — das Array, mit dem verglichen wird; seine Einträge erscheinen im Ergebnis.
  • ...$arrays — ein oder mehrere Arrays, die mit dem ersten verglichen werden.
  • $key_compare_func — ein Callback, der zwei Schlüssel vergleicht. Er muss eine ganze Zahl zurückgeben, die kleiner als, gleich oder größer als 0 ist, wenn der erste Schlüssel als kleiner als, gleich oder größer als der zweite gilt (dasselbe Vertragsmuster wie ein usort-Komparator).

Die Funktion gibt ein neues Array zurück, das die übereinstimmenden Einträge aus $array enthält und dabei die ursprünglichen Schlüssel beibehält.

Wie der Schlüssel-Callback funktioniert

Anders als array_intersect_assoc(), das Schlüssel mit === vergleicht, delegiert diese Funktion den Schlüsselvergleich an Ihren Callback. Damit können Sie Übereinstimmungsregeln implementieren, die PHP nicht von Haus aus bietet – z. B. Groß-/Kleinschreibung-unempfindliche Schlüssel, Schlüssel ohne Leerzeichen oder gebietsschemabewusste Sortierung.

Beachten Sie die geteilte Verantwortung: Schlüssel werden von Ihrem Callback verglichen, aber Werte werden weiterhin von der Funktion selbst verglichen (locker, als string). Wenn Sie auch einen benutzerdefinierten Wertvergleich benötigen, verwenden Sie array_uintersect_uassoc().

Beispiel

<?php

// The callback receives two keys and must return an int:
// 0 = equal, -1 = first is smaller, 1 = first is larger.
function compareKeys($key1, $key2) {
    if ($key1 === $key2) {
        return 0;
    }
    return ($key1 > $key2) ? 1 : -1;
}

$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["a" => "green", "yellow", "red"];

$result = array_intersect_uassoc($array1, $array2, "compareKeys");

print_r($result);

?>

Ausgabe:

Array
(
    [a] => green
)

Nur "a" => "green" bleibt erhalten, da es der einzige Eintrag ist, dessen Schlüssel und Wert beide in $array2 vorkommen:

  • "b" => "brown" und "c" => "blue" — diese Schlüssel existieren nicht in $array2.
  • 0 => "red" in $array1 — der Wert "red" existiert zwar in $array2, aber unter Schlüssel 1, daher stimmen die Schlüssel (0 vs. 1) nicht überein.

Wann verwenden

Greifen Sie auf array_intersect_uassoc() zurück, wenn Sie eine schlüsselbewusste Schnittmenge benötigen und die Schlüssel eine benutzerdefinierte Übereinstimmungslogik erfordern. Ein häufiger Anwendungsfall ist der Groß-/Kleinschreibung-unempfindliche Abgleich von Header- oder Spaltennamen:

<?php

function ci_keys($k1, $k2) {
    return strcasecmp((string) $k1, (string) $k2);
}

$config   = ["Host" => "localhost", "Port" => 8080];
$expected = ["host" => "localhost", "PORT" => 8080];

print_r(array_intersect_uassoc($config, $expected, "ci_keys"));

?>

Dies behält Host => localhost und Port => 8080, weil der Callback Host/host und Port/PORT als denselben Schlüssel behandelt, während die Werte weiterhin übereinstimmen.

Verwandte Funktionen

FunktionSchlüsselvergleichWertvergleich
array_intersect()ignorierteingebaut
array_intersect_assoc()===eingebaut
array_intersect_key()=== (nur Schlüssel)ignoriert
array_intersect_ukey()Callback (nur Schlüssel)ignoriert
array_intersect_uassoc()Callbackeingebaut
array_uintersect_uassoc()CallbackCallback

Fazit

array_intersect_uassoc() gibt die Einträge des ersten Arrays zurück, deren Wert und Schlüssel beide in jedem anderen Array vorkommen, während Sie die Schlüsselübereinstimmung über einen benutzerdefinierten Callback steuern können. Verwenden Sie die Funktion, wenn eine assoziative Schnittmenge flexible Schlüsselregeln erfordert – etwa Groß-/Kleinschreibung-unempfindliche oder von Leerzeichen befreite Schlüssel – und beachten Sie, dass Werte weiterhin mit PHPs eingebautem Vergleich geprüft werden.

Übungen

Übung
Was ist der Zweck der Funktion array_intersect_uassoc() in PHP?
Was ist der Zweck der Funktion array_intersect_uassoc() in PHP?
Was this page helpful?