W3docs

in_array()

Erfahren Sie, wie PHP's in_array() prüft, ob ein Wert in einem Array existiert, wie lose vs. strikte Vergleiche funktionieren und welche Typfallen zu vermeiden sind.

Was in_array() macht

in_array() prüft, ob ein bestimmter Wert irgendwo in einem Array vorhanden ist, und gibt einen boolean zurück: true, wenn der Wert gefunden wurde, false, wenn nicht. Die Funktion durchsucht die Werte des Arrays (nicht seine Schlüssel), was sie zur bevorzugten Funktion für Fragen wie „Ist diese Option erlaubt?" oder „Wurde dieser Benutzer bereits zur Liste hinzugefügt?" macht.

Diese Seite behandelt die Signatur, wie lose vs. strikte Vergleiche das Ergebnis verändern, die Typfallen, über die man leicht stolpert, und wann man stattdessen eine andere Funktion verwenden sollte.

Syntax

in_array(mixed $needle, array $haystack, bool $strict = false): bool
ParameterBeschreibung
$needleDer gesuchte Wert.
$haystackDas Array, in dem gesucht wird.
$strictWenn true, müssen auch die Typen übereinstimmen (verwendet === statt ==). Standardmäßig false.

Die Funktion gibt true zurück, wenn $needle in $haystack gefunden wird, andernfalls false.

Einfaches Beispiel

<?php

$fruits = ["apple", "banana", "orange"];

if (in_array("banana", $fruits)) {
    echo "Found!";
} else {
    echo "Not found.";
}
// Output: Found!

in_array() ist bei Strings Groß-/Kleinschreibung-sensitiv"Apple" würde "apple" nicht entsprechen:

php— editable, runs on the server

Loser vs. strikter Vergleich

Standardmäßig verwendet in_array() den losen Vergleich (==), sodass Werte verschiedener Typen übereinstimmen können. Übergeben Sie true als drittes Argument, um eine exakte Typübereinstimmung zu verlangen (===):

<?php

$numbers = [1, 2, 3, 4];

// Loose: the string "1" equals the integer 1
var_dump(in_array("1", $numbers));        // bool(true)

// Strict: "1" (string) is not identical to 1 (int)
var_dump(in_array("1", $numbers, true));  // bool(false)

Verwenden Sie den strikten Modus immer dann, wenn Ihr Array Typen mischt, oder wenn die Übereinstimmung mit dem falschen Typ ein Fehler wäre — zum Beispiel beim Prüfen einer vom Benutzer angegebenen ID gegen eine Liste von Integer-IDs.

Die Typkonvertierungs-Falle

Lose Vergleiche können zu überraschenden Ergebnissen führen. Ein klassisches Beispiel sucht nach einem leeren String oder 0 in einer Liste von Strings:

<?php

$values = [0, "", "foo", "bar"];

var_dump(in_array("0", $values));       // bool(true)  — "0" == 0
var_dump(in_array("0", $values, true)); // bool(false) — different types

Hier entspricht "0" (string) lose dem Integer 0, der bereits im Array vorhanden ist, sodass die lose Suche true zurückgibt. Der strikte Modus beseitigt diese Mehrdeutigkeit.

Hinweis: PHP 8 hat geändert, wie Strings und Zahlen verglichen werden. In PHP 7 gab in_array(0, ["foo", "bar"]) true zurück, weil "foo" zu 0 konvertiert wurde. In PHP 8+ gibt derselbe Aufruf false zurück. Im Zweifelsfall $strict = true übergeben.

Die Position statt true/false erhalten

in_array() teilt Ihnen nur mit, ob ein Wert existiert. Wenn Sie auch den Schlüssel benötigen, verwenden Sie array_search() — diese Funktion gibt bei Erfolg den Schlüssel zurück und bei Misserfolg false:

<?php

$fruits = ["apple", "banana", "orange"];

$key = array_search("banana", $fruits);
var_dump($key); // int(1)

Um zu prüfen, ob ein bestimmter Schlüssel (nicht Wert) existiert, verwenden Sie stattdessen array_key_exists() oder isset().

Wann eine andere Funktion verwendet werden sollte

  • Position des übereinstimmenden Werts benötigt? → array_search()
  • Auf einen Schlüssel statt einen Wert prüfen? → array_key_exists() oder isset()
  • Ein Array auf übereinstimmende Elemente filtern? → array_filter()
  • Ein sehr großes Array wiederholt durchsuchen? Schlüssel mit array_keys() umdrehen und isset() verwenden, was schneller ist als mit in_array() zu scannen.

Zusammenfassung

  • in_array($needle, $haystack) gibt true/false zurück, je nachdem, ob ein Wert im Array vorhanden ist.
  • Die Funktion durchsucht Werte, ist bei Strings Groß-/Kleinschreibung-sensitiv und verwendet standardmäßig den losen Vergleich.
  • true als drittes Argument übergeben für striktes (typbewusstes) Matching — empfohlen, wenn Typen wichtig sind.
  • array_search() verwenden, wenn der Schlüssel benötigt wird, und array_key_exists()/isset() beim Prüfen von Schlüsseln.

Übungen

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