W3docs

PHP Intersect-Funktion: Ein Leitfaden zu array_intersect

Erfahren Sie, wie array_intersect() in PHP funktioniert: Syntax, Vergleichslogik, Schlüsselerhaltung und praktische Beispiele.

Die Funktion array_intersect() vergleicht zwei oder mehr Arrays und gibt die Werte zurück, die in allen vorkommen. Sie ist eine der nützlichsten array-basierten Mengenoperationen in PHP — praktisch immer dann, wenn Sie die Frage beantworten möchten „Welche Elemente erscheinen in jeder Liste?", etwa zum Finden gemeinsamer Tags, gemeinsamer Berechtigungen oder Produkte, die in zwei Katalogen existieren.

Dieses Kapitel behandelt die Syntax, wie Vergleich und Schlüsselerhaltung tatsächlich funktionieren, typische Fallstricke (loser Vergleich, nur Werte werden verglichen) sowie ausführbare Beispiele.

Syntax

array_intersect(array $array, array ...$arrays): array
  • $array — das array, dessen Werte gegen alle anderen geprüft werden.
  • ...$arrays — ein oder mehrere zusätzliche Arrays, gegen die verglichen wird.

Die Funktion gibt ein neues array zurück, das jeden Eintrag aus dem ersten array enthält, dessen Wert in allen anderen Arrays vorhanden ist. Die ursprünglichen Arrays bleiben unverändert.

Zwei wichtige Details:

  • Es werden nur Werte verglichen, keine Schlüssel. Schlüssel werden beim Abgleich ignoriert, aber die Schlüssel des ersten Arrays werden im Ergebnis beibehalten.
  • Der Vergleich ist standardmäßig lose. Intern vergleicht PHP Elemente als string: (string) $a === (string) $b. Daher werden der Integer 1 und der string "1" als gleich behandelt. Verwenden Sie array_intersect_assoc(), wenn auch Schlüssel übereinstimmen müssen, oder array_intersect_key(), um nach Schlüsseln statt nach Werten zu schneiden.

Wenn eines der Argumente ein leeres array ist, ist das Ergebnis immer leer — es kann nichts gemeinsam mit einer Liste sein, die keine Elemente hat.

Beispiele

Beispiel 1: Schnittmenge zweier Arrays

Vergleichen Sie zwei Arrays und behalten Sie nur die Werte, die in beiden vorkommen.

php— editable, runs on the server

Ausgabe:

Array
(
    [2] => c
    [3] => d
)

"c" und "d" kommen in beiden Arrays vor. Beachten Sie die Schlüssel: 2 und 3 stammen aus $array1, dem ersten Argument — array_intersect() behält die ursprünglichen Schlüssel bei, anstatt sie neu zu nummerieren. Wenn Sie einen sauberen 0, 1, 2 …-Index benötigen, umschließen Sie das Ergebnis mit array_values().

Beispiel 2: Schnittmenge mehrerer Arrays

Sie können beliebig viele Arrays übergeben. Ein Wert wird nur beibehalten, wenn er in jedem von ihnen vorkommt.

php— editable, runs on the server

Ausgabe:

Array
(
)

Das Ergebnis ist leer: kein einzelner Wert ist in allen drei Arrays vorhanden. "c"/"d" fehlen in $array3, und "e"/"f" fehlen in $array1.

Beispiel 3: Fallstrick beim losen Vergleich

Da Elemente als string verglichen werden, stimmen Zahlen und ihre string-Äquivalente überein. Dies ist das Verhalten, das die meisten überrascht.

<?php

$numbers = array(1, 2, 3, 4);
$strings = array("2", "4", "6");

$result = array_intersect($numbers, $strings);

print_r($result);

?>

Ausgabe:

Array
(
    [1] => 2
    [3] => 4
)

Der Integer 2 stimmte mit dem string "2" überein, und 4 mit "4" — obwohl sie unterschiedliche Typen haben. Die zurückgegebenen Werte stammen aus dem ersten array, bleiben hier also Integers. Wenn exakte Typenübereinstimmung wichtig ist, filtern Sie das Ergebnis selbst oder vergleichen Sie mit strengerer Logik.

Wann es verwendet werden sollte

Verwenden Sie array_intersect(), wenn Sie die gemeinsamen Werte aus mehreren Listen benötigen. Einige praktische Anwendungsfälle:

  • Rollen finden, die ein Nutzer in beiden Berechtigungssätzen hat.
  • Produkte anzeigen, die in zwei Shop-Inventaren existieren.
  • Prüfen, welche angeforderten Felder tatsächlich erlaubt sind (array_intersect($requested, $whitelist)).

Für die umgekehrte Operation — Werte, die nicht gemeinsam sind — siehe array_diff(). Um Arrays zusammenzuführen statt zu schneiden, verwenden Sie array_merge(), und um einen einzelnen Wert zu prüfen, nutzen Sie in_array().

Fazit

array_intersect() gibt die Werte zurück, die in jedem übergebenen array vorhanden sind, bewahrt die Schlüssel des ersten Arguments und vergleicht Elemente lose als string. Denken Sie daran, array_intersect_assoc() oder array_intersect_key() zu verwenden, wenn Schlüssel eine Rolle spielen, und array_values(), wenn Sie das Ergebnis neu indizieren möchten.

Übungen

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