W3docs

Die PHP-Funktion array_uintersect_uassoc meistern

Erfahren Sie, wie array_uintersect_uassoc in PHP Array-Schnittmengen mit benutzerdefinierten Wert- und Schlüssel-Callbacks berechnet, mit Beispielen.

PHP ist eine leistungsstarke Sprache mit vielen Funktionen, und array_uintersect_uassoc ist eine der vielseitigsten Funktionen in der PHP-array-Funktionsbibliothek. Diese Funktion ermöglicht es Ihnen, die Schnittmenge von Arrays mit zusätzlichen benutzerdefinierten Schlüsselvergleichsfunktionen zu berechnen.

Wenn Sie nach einer Möglichkeit suchen, zwei Arrays zu vergleichen und die Werte zu erhalten, die in allen vorhanden sind, ist die Funktion array_uintersect_uassoc genau das Richtige. Diese Funktion bietet die Flexibilität, Arrays mit benutzerdefinierten Vergleichsfunktionen zu vergleichen, was sie zu einem wertvollen Werkzeug für jeden PHP-Entwickler macht.

Hier finden Sie eine detaillierte Übersicht der Funktion array_uintersect_uassoc sowie einige Beispiele, die Ihnen helfen zu verstehen, wie sie funktioniert.

Was ist die Funktion array_uintersect_uassoc?

Die Funktion array_uintersect_uassoc ist eine in PHP integrierte Funktion, die verwendet wird, um die Schnittmenge von Arrays mithilfe benutzerdefinierter Vergleichsfunktionen für Daten und Schlüssel zu berechnen. Diese Funktion vergleicht die Werte zweier Arrays und gibt die Werte zurück, die in allen vorhanden sind, sofern ihre Schlüssel gemäß der Schlüsselvergleichsfunktion ebenfalls übereinstimmen.

Eines der wesentlichen Merkmale der Funktion array_uintersect_uassoc ist ihre Fähigkeit, Arrays mit benutzerdefinierten Schlüssel- und Wertvergleichsfunktionen zu vergleichen. Das bedeutet, dass Sie die Vergleichslogik an Ihre spezifischen Anforderungen anpassen können.

So verwenden Sie die Funktion array_uintersect_uassoc

Die Funktion array_uintersect_uassoc akzeptiert zwei oder mehr Arrays, gefolgt von zwei Callbacks — das letzte Argument ist immer der Schlüsselvergleichs-Callback und das vorherige ist der Wertvergleichs-Callback. Hier ist die Syntax:

PHP array_uintersect_uassoc Funktionssyntax

array_uintersect_uassoc(
    array $array1,
    array $array2,
    array ...$arrays,
    callable $value_compare_func,
    callable $key_compare_func
): array

Parameter:

  • array1: Das Basis-array. Werte, die den Vergleich überstehen, werden von hier übernommen, mit ihren ursprünglichen Schlüsseln.
  • array2, ...$arrays: Ein oder mehrere Arrays, die mit array1 verglichen werden.
  • value_compare_func: Ein Callback zum Vergleich von Werten. Er empfängt zwei Werte und muss eine ganze Zahl kleiner als, gleich oder größer als 0 zurückgeben — genau wie ein Sortierkomparator. Die Rückgabe von 0 bedeutet „gleich".
  • key_compare_func: Ein Callback zum Vergleich von Schlüsseln, mit demselben dreiwertigen Rückgabevertrag.

Rückgabewert: Gibt ein array zurück, das jeden Eintrag von array1 enthält, dessen Wert und Schlüssel beide übereinstimmen mit einem Eintrag in jedem der anderen Arrays. Ein Element bleibt nur erhalten, wenn beide Callbacks gegen ein Element in jedem anderen array 0 zurückgeben.

Da beide Callbacks dem Standard-<=> (Spaceship)-Vertrag folgen, teilt die Rückgabe von 1 oder -1 PHP lediglich mit, dass die Elemente nicht gleich sind — nur 0 zählt als Übereinstimmung.

Schauen wir uns ein Beispiel an, wie die Funktion array_uintersect_uassoc verwendet wird, um zwei Arrays zu vergleichen:

PHP: Die Funktion array_uintersect_uassoc zum Vergleich zweier Arrays verwenden

<?php

function compare_data($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b) ? 1 : -1;
}

function compare_keys($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b) ? 1 : -1;
}

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

$result = array_uintersect_uassoc($array1, $array2, "compare_data", "compare_keys");
print_r($result);

?>

Im obigen Beispiel definieren wir zunächst zwei benutzerdefinierte Vergleichsfunktionen für Daten und Schlüssel und dann zwei Arrays, die wir vergleichen möchten. Anschließend rufen wir die Funktion array_uintersect_uassoc mit den beiden Arrays und den beiden Vergleichsfunktionen als Argumente auf.

Die Funktion array_uintersect_uassoc gibt ein array zurück, das die Werte enthält, die in beiden Arrays vorhanden sind. In diesem Beispiel wäre das Ergebnis:

Array
(
    [a] => green
    [d] => red
)

Warum nur a und d? Ein Element bleibt nur erhalten, wenn sowohl sein Schlüssel als auch sein Wert übereinstimmen.

  • [a] => green stimmt überein: Schlüssel a und Wert green sind in beiden Arrays vorhanden. Behalten.
  • [b] => brown wird verworfen: Schlüssel b ist in beiden vorhanden, aber die Werte (brown vs. yellow) unterscheiden sich.
  • [c] => blue wird verworfen: array1 hat es unter Schlüssel c, aber array2 speichert blue unter dem automatisch zugewiesenen numerischen Schlüssel 0, daher stimmen die Schlüssel nicht überein.
  • [d] => red stimmt überein: Schlüssel d und Wert red sind in beiden vorhanden. Behalten.

Dieser letzte Fall ist genau das, was diese Funktion von einer reinen Wertschnittmenge unterscheidet: Selbst wenn ein Wert in beiden Arrays vorhanden ist, entfernt ein nicht übereinstimmender Schlüssel ihn.

Hinweis: Das Beispiel verwendet benannte Funktionen für breite Kompatibilität, aber modernes PHP (7.4+) unterstützt prägnante Arrow-Funktionen (z. B. fn($a, $b) => $a <=> $b). Wählen Sie die Syntax, die den PHP-Versionsanforderungen Ihres Projekts entspricht.

Wann diese Funktion verwenden

Verwenden Sie array_uintersect_uassoc, wenn alle drei dieser Bedingungen zutreffen: Sie benötigen eine Schnittmenge, die Schlüssel sind bedeutsam (assoziative Daten), und entweder die Werte oder die Schlüssel benötigen benutzerdefinierte Vergleichslogik (Strings ohne Berücksichtigung der Groß-/Kleinschreibung, Objekte, gebietsschemabewusste Sortierung, Toleranz bei Fließkommazahlen usw.). Wenn Sie nur eines davon benötigen, ist ein einfacheres Äquivalent die bessere Wahl:

Weitere Informationen zur Arbeit mit Arrays finden Sie im Kapitel PHP Arrays.

Ein praxisnahes Beispiel: Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung

Das erste Beispiel verwendete strikte Komparatoren und verhält sich daher wie das eingebaute array_intersect_assoc. Die eigentliche Stärke zeigt sich, wenn die Callbacks etwas tun, das die eingebauten Funktionen nicht können — hier: Schlüssel und Werte unabhängig von der Groß-/Kleinschreibung abgleichen:

<?php

$inventory = ["Apple" => "RED", "Banana" => "yellow", "Cherry" => "dark-red"];
$catalog   = ["apple" => "red", "banana" => "GREEN", "cherry" => "DARK-RED"];

$result = array_uintersect_uassoc(
    $inventory,
    $catalog,
    fn($a, $b) => strcasecmp($a, $b), // compare values, ignoring case
    fn($a, $b) => strcasecmp($a, $b)  // compare keys, ignoring case
);

print_r($result);

?>

strcasecmp gibt 0 zurück, wenn zwei Strings ohne Berücksichtigung der Groß-/Kleinschreibung gleich sind, und passt damit direkt in den Komparatorvertrag. Das Ergebnis behält Einträge aus $inventory, deren Schlüssel und Wert in $catalog ohne Berücksichtigung der Groß-/Kleinschreibung übereinstimmen:

Array
(
    [Apple] => RED
    [Cherry] => dark-red
)

Banana wird ausgeschlossen, weil die Schlüssel zwar übereinstimmen, die Werte (yellow vs. GREEN) aber selbst ohne Berücksichtigung der Groß-/Kleinschreibung unterschiedlich sind. Ein einfaches array_intersect_assoc hätte keine dieser Einträge gefunden, da sein integrierter Vergleich zwischen Groß- und Kleinschreibung unterscheidet.

Vorteile der Verwendung der Funktion array_uintersect_uassoc

Es gibt mehrere Vorteile bei der Verwendung der Funktion array_uintersect_uassoc in Ihren PHP-Projekten. Hier sind einige der wichtigsten Vorteile:

1. Präzise Schlüssel-Wert-Übereinstimmung

Im Gegensatz zu array_uintersect stellt diese Funktion sicher, dass nur Elemente mit übereinstimmenden Schlüsseln und Werten zurückgegeben werden. Dies verhindert falsch-positive Ergebnisse beim Vergleich assoziativer Arrays, bei denen Schlüssel eine semantische Bedeutung tragen.

2. Benutzerdefinierte Vergleichslogik

Sie können präzise Gleichheitsregeln für Werte und Schlüssel definieren und komplexe Datentypen oder benutzerdefinierte Sortieranforderungen verarbeiten, die integrierte Operatoren nicht abdecken können.

3. Native Leistung

In C innerhalb des PHP-Kerns implementiert, wird die Funktion effizient für Standard-array-Operationen ohne externe Abhängigkeiten ausgeführt, was sie für mittelgroße Datensätze geeignet macht.

Tipps zur Verwendung der Funktion array_uintersect_uassoc

Hier sind einige Tipps zur Verwendung der Funktion array_uintersect_uassoc in Ihren PHP-Projekten:

1. Benutzerdefinierte Vergleichsfunktionen definieren

Um das Beste aus der Funktion array_uintersect_uassoc herauszuholen, ist es wichtig, benutzerdefinierte Vergleichsfunktionen zu definieren. Damit können Sie die Vergleichslogik an die spezifischen Anforderungen Ihres Projekts anpassen.

2. Typsicheren Vergleich verwenden

Bei der Definition Ihrer benutzerdefinierten Vergleichsfunktionen ist es wichtig, typsichere Vergleichsoperatoren zu verwenden. Dadurch wird sichergestellt, dass der Vergleich mit den richtigen Datentypen durchgeführt wird, was die Genauigkeit der Ergebnisse verbessert.

3. Vergleichsfunktionen testen

Bevor Sie Ihre benutzerdefinierten Vergleichsfunktionen in der Produktion einsetzen, ist es wichtig, sie gründlich zu testen. So können Sie Fehler oder Probleme identifizieren und sicherstellen, dass Ihre Vergleichslogik korrekt funktioniert.

Fazit

In diesem Artikel haben wir die Funktion array_uintersect_uassoc in PHP untersucht. Diese Funktion ist ein leistungsstarkes Werkzeug zum Vergleich von Arrays und zum Auffinden der Werte, die in allen vorhanden sind. Durch die Verwendung benutzerdefinierter Vergleichsfunktionen für Daten und Schlüssel können Sie die Vergleichslogik an die spezifischen Anforderungen Ihres Projekts anpassen.

Wenn Sie Ihre PHP-Kenntnisse auf die nächste Stufe heben möchten, ist die Beherrschung der Funktion array_uintersect_uassoc ein guter Ausgangspunkt. Mit ihrer Flexibilität und Vielseitigkeit ist diese Funktion ein unverzichtbares Werkzeug für jeden PHP-Entwickler.

Danke, dass Sie unseren Leitfaden zur Funktion array_uintersect_uassoc gelesen haben. Wir hoffen, er war hilfreich und informativ. Wenn Sie Fragen oder Anmerkungen haben, können Sie uns gerne kontaktieren.

Übungen

Übung
Was ist der Zweck der Funktion array_uintersect_uassoc in PHP?
Was ist der Zweck der Funktion array_uintersect_uassoc in PHP?
Was this page helpful?