PHP Array Search: Ein umfassender Leitfaden
PHP array_search() findet den Schlüssel eines Wertes im array. Syntax, strenger Vergleich und häufige Fallstricke erklärt.
array_search() findet das erste Element eines arrays, das einem bestimmten Wert entspricht, und gibt den Schlüssel dieses Elements zurück. Wird nichts gefunden, gibt die Funktion false zurück. Verwende sie, wenn du einen Wert kennst und wissen möchtest, wo er im array liegt — zum Beispiel den Index, den du an unset(), array_splice() oder eine Folgeabfrage übergeben würdest.
Die Funktion funktioniert sowohl bei indizierten als auch bei assoziativen arrays und gibt den tatsächlichen Schlüssel zurück — der kann 0, eine nicht-sequenzielle Ganzzahl oder ein string sein. Diese Seite behandelt die Syntax, lose vs. strikte Vergleiche, den false-vs-0-Fallstrick, das Finden aller Treffer (nicht nur des ersten) sowie die Frage, wann stattdessen in_array() oder array_keys() sinnvoller ist.
Syntax
array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false$needle— der Wert, nach dem gesucht wird.$haystack— das array, in dem gesucht wird.$strict— optional. Beifalse(Standard) werden Werte lose verglichen (==), sodass0,"0",0.0und sogarfalseeinander entsprechen können. Beitruewird strikt verglichen (===), sodass sowohl Typ als auch Wert übereinstimmen müssen. Übergib immertrue, wenn das array gemischte Typen enthält.
Die Funktion gibt den Schlüssel des ersten übereinstimmenden Elements zurück oder false, wenn der Wert nicht vorhanden ist.
Grundlegende Verwendung
Der einfachste Fall: Ein indiziertes array durchsuchen und den Schlüssel ausgeben, an dem sich der Wert befindet.
Hier befindet sich 3 an Index 2, daher gibt das Skript Value was found at key: 2 aus. Beachte, dass array_search() den tatsächlichen Schlüssel zurückgibt, nicht die Position — bei einem neu indizierten oder assoziativen array sind das nicht zwingend dasselbe.
Assoziative arrays durchsuchen
array_search() ist bei assoziativen arrays am nützlichsten, da es einen string-Schlüssel zurückgibt, mit dem du verwandte Daten abrufen kannst:
<?php
$users = [
"admin" => "Alice",
"editor" => "Bob",
"viewer" => "Cara",
];
$role = array_search("Bob", $users);
echo "Bob's role is: $role"; // editor
?>Dies gibt Bob's role is: editor aus. Wenn du nur wissen möchtest, ob ein Wert vorhanden ist — nicht aber seinen Schlüssel — ist in_array() vorzuziehen, da es klarer und etwas schneller ist.
Strenger vs. loser Vergleich
Standardmäßig vergleicht array_search() lose (==), was bei unterschiedlichen Typen zu überraschenden Treffern führen kann. Wird das dritte Argument auf true gesetzt, wird der Vergleich strikt (===) erzwungen, sodass auch der Typ übereinstimmen muss:
In diesem Beispiel haben wir ein array namens $array erstellt, das fünf Elemente enthält, darunter den string-Wert "3". Dann setzen wir den Suchwert auf 3. Die Funktion array_search() wird verwendet, um den Wert im array zu suchen, wobei der Parameter strict auf true gesetzt ist. Das Ergebnis wird in der Variable $result gespeichert. Abschließend wird mit einer if-Anweisung geprüft, ob der Wert gefunden wurde oder nicht. Wurde er gefunden, wird der Schlüssel ausgegeben. Wurde er nicht gefunden, erscheint eine entsprechende Meldung. Beachte, dass array_search() false zurückgibt, wenn der Wert nicht gefunden wird. Da 0 ein gültiger Schlüssel ist, musst du den strikten Vergleich (=== false) verwenden, um zwischen einem Nicht-Gefunden-Ergebnis und dem Schlüssel 0 korrekt zu unterscheiden.
Der false-vs-0-Fallstrick
Der häufigste Fehler bei array_search() ist das Missinterpretieren des Rückgabewerts. Da ein gefundenes Element legitimerweise den Schlüssel 0 haben kann und "nicht gefunden" false zurückgibt, behandelt eine lose Prüfung wie if (!$result) beide Fälle gleich. Vergleiche immer mit === false:
<?php
$names = ["Alice", "Bob", "Cara"];
// Alice is at key 0 — a real result, but falsy!
$key = array_search("Alice", $names);
if ($key === false) {
echo "Not found";
} else {
echo "Found at key: $key"; // Found at key: 0
}
?>Dies gibt Found at key: 0 aus. Eine naive Prüfung mit if (!$key) hätte fälschlicherweise "Not found" gemeldet.
Alle übereinstimmenden Schlüssel finden
array_search() stoppt beim ersten Treffer. Um die Schlüssel aller Elemente zu erhalten, die einem Wert entsprechen, verwende array_keys() mit dem optionalen Suchargument:
<?php
$scores = [10, 20, 30, 20, 50];
echo array_search(20, $scores); // 1 (first match only)
echo "\n";
print_r(array_keys($scores, 20)); // Array ( [0] => 1 [1] => 3 )
?>array_search() gibt 1 zurück, während array_keys($scores, 20) jeden Index zurückgibt, der 20 enthält (1 und 3).
Wann welche Funktion verwenden
| Ziel | Beste Funktion |
|---|---|
| Schlüssel des ersten übereinstimmenden Werts ermitteln | array_search() |
| Nur prüfen, ob ein Wert vorhanden ist | in_array() |
| Alle Schlüssel für einen Wert ermitteln | array_keys() |
| Prüfen, ob ein Schlüssel vorhanden ist | array_key_exists() |
Zusammenfassung
array_search() gibt den Schlüssel des ersten Elements zurück, das deinem Wert entspricht, oder false, wenn keines gefunden wird. Merke dir das Wesentliche: Übergib strict = true, wenn das array gemischte Typen enthält, teste das Ergebnis immer mit === false, und greife auf in_array() oder array_keys() zurück, wenn du eine Ja/Nein-Antwort oder alle übereinstimmenden Schlüssel benötigst.