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| Parameter | Beschreibung |
|---|---|
$needle | Der gesuchte Wert. |
$haystack | Das Array, in dem gesucht wird. |
$strict | Wenn 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:
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 typesHier 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"])truezurück, weil"foo"zu0konvertiert wurde. In PHP 8+ gibt derselbe Aufruffalsezurü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()oderisset() - Ein Array auf übereinstimmende Elemente filtern? →
array_filter() - Ein sehr großes Array wiederholt durchsuchen? Schlüssel mit
array_keys()umdrehen undisset()verwenden, was schneller ist als mitin_array()zu scannen.
Zusammenfassung
in_array($needle, $haystack)gibttrue/falsezurü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.
trueals drittes Argument übergeben für striktes (typbewusstes) Matching — empfohlen, wenn Typen wichtig sind.array_search()verwenden, wenn der Schlüssel benötigt wird, undarray_key_exists()/isset()beim Prüfen von Schlüsseln.