W3docs

Die PHP-Funktion array_diff_key verstehen

Die PHP-Funktion array_diff_key vergleicht arrays anhand ihrer Schlüssel und gibt Einträge zurück, die nur im ersten array vorhanden sind.

array_diff_key() vergleicht zwei oder mehr arrays anhand ihrer Schlüssel und gibt die Einträge des ersten arrays zurück, deren Schlüssel in keinem der anderen arrays vorhanden sind. Das entscheidende Wort ist Schlüssel: Die Funktion betrachtet die Werte niemals. Damit ist sie das richtige Werkzeug, wenn Elemente eines arrays basierend auf einer Menge von Schlüsseln entfernt oder beibehalten werden sollen – etwa um unerwünschte Felder aus Formulareingaben zu entfernen oder um herauszufinden, welche Konfigurationsoptionen in einem Override fehlen.

Diese Seite behandelt die Funktionssignatur, ein ausführbares Beispiel, den Umgang der Funktion mit Werten und numerischen Schlüsseln, die häufigsten praxisnahen Anwendungsfälle und den Unterschied zu verwandten array-Vergleichsfunktionen.

Syntax

array_diff_key(array $array, array ...$arrays): array
  • $array — das array, das als Referenz dient (das Ergebnis enthält ausschließlich dessen Einträge).
  • ...$arrays — ein oder mehrere arrays, deren Schlüssel dazu verwendet werden, Einträge aus $array auszuschließen.
  • Gibt ein neues array zurück. Jeder Eintrag von $array wird nur dann beibehalten, wenn sein Schlüssel in keinem der anderen arrays vorkommt. Schlüssel und Werte bleiben genau so erhalten, wie sie in $array standen.

Wie array_diff_key funktioniert

Die Funktion durchläuft die Schlüssel des ersten arrays. Für jeden Schlüssel prüft sie alle anderen arrays; wird der Schlüssel irgendwo gefunden, wird der Eintrag verworfen. Nur Einträge, deren Schlüssel ausschließlich im ersten array vorkommen, bleiben erhalten.

Hier ist ein praxisnahes Beispiel – ein vollständiges Preisverzeichnis wird mit den Artikeln verglichen, die bereits einen Rabatt erhalten haben, um die Artikel zu finden, die noch keinen haben:

PHP-Beispiel zur Verwendung von array_diff_key

<?php

$prices = [
    "apple"  => 1.20,
    "banana" => 0.50,
    "cherry" => 3.00,
    "date"   => 2.10,
];

// Items that already have a discounted price.
$discounted = ["banana" => 0.40, "date" => 1.90];

// Keep only the items NOT present in $discounted (compared by key).
$result = array_diff_key($prices, $discounted);

print_r($result);

?>

Die Ausgabe behält apple und cherry, weil ihre Schlüssel in $discounted nicht vorhanden sind. Beachten Sie, dass banana und date entfernt werden, obwohl sich ihre Werte zwischen den beiden arrays unterscheidenarray_diff_key() ignoriert Werte vollständig:

Array
(
    [apple] => 1.2
    [cherry] => 3
)

Mehr als zwei arrays vergleichen

Es können beliebig viele arrays übergeben werden. Ein Eintrag wird entfernt, wenn sein Schlüssel in einem davon vorkommt:

<?php

$a = ["color" => "red", "size" => "M", "qty" => 5];
$b = ["color" => "blue"];
$c = ["qty" => 99];

print_r(array_diff_key($a, $b, $c));

?>

Nur size bleibt übrig, weil color von $b und qty von $c gefunden wird:

Array
(
    [size] => M
)

Schlüssel werden als string verglichen

PHP wandelt alle Schlüssel vor dem Vergleich in string um, sodass der ganzzahlige Schlüssel 0 und der string-Schlüssel "0" als derselbe Schlüssel behandelt werden. Dies ist relevant, wenn numerische und string-Schlüssel gemischt werden:

<?php

$nums   = [0 => "a", 1 => "b", 2 => "c"];
$remove = ["0" => "x", "2" => "y"];

print_r(array_diff_key($nums, $remove));

?>
Array
(
    [1] => b
)

Anwendungsfälle für array_diff_key

  • Felder auf Whitelist/Blacklist setzen. Unerwünschte Schlüssel aus Benutzereingaben entfernen: array_diff_key($input, array_flip(['password', 'token'])) entfernt diese beiden Schlüssel unabhängig von ihren Werten.
  • Fehlende Konfiguration finden. Eine Menge von Standardwerten mit einer benutzerseitig angegebenen Konfiguration vergleichen, um zu sehen, welche Schlüssel fehlen.
  • Datensätze abgleichen. Datensätze (nach ID als Schlüssel) identifizieren, die in einem array, aber nicht in einem anderen vorhanden sind.
  • Request-Daten bereinigen, bevor sie an eine Funktion übergeben werden, die unerwartete Schlüssel ablehnt.

Tipp: Wenn stattdessen nur die Einträge beibehalten werden sollen, deren Schlüssel in einem anderen array vorkommen, verwenden Sie array_intersect_key() – es ist das Gegenstück zu array_diff_key().

array_diff_key im Vergleich zu verwandten Funktionen

FunktionVergleicht nachWerte berücksichtigt?
array_diff_key()Schlüssel onlynein
array_diff()Werte onlyja
array_diff_assoc()Schlüssel und Werteja
array_diff_ukey()Schlüssel via Callbacknein

Wenn zusätzlich zur Schlüsselprüfung auch die Werte geprüft werden sollen, verwenden Sie array_diff_assoc(). Um den Schlüsselvergleich anzupassen (z. B. für Groß-/Kleinschreibungsignoranz), verwenden Sie array_diff_ukey().

Fazit

array_diff_key() ist eine fokussierte, schnelle Möglichkeit, ein array anhand der Schlüssel anderer arrays zu filtern. Zwei Regeln, die häufig zu Verwechslungen führen: Die Funktion vergleicht ausschließlich Schlüssel (Werte werden ignoriert), und Schlüssel werden vor dem Vergleich in string umgewandelt. Für wertebewusste Vergleiche siehe array_diff_assoc(), und um einen einzelnen Schlüssel zu prüfen, verwenden Sie array_key_exists().

Übungen

Übung
Was macht die Funktion array_diff_key() in PHP?
Was macht die Funktion array_diff_key() in PHP?
Was this page helpful?