Mit array_search() lässt sich ein bestimmter Wert in einem Array suchen. Die Funktion gibt den Schlüssel des gefundenen Elements zurück, oder false, wenn der Wert nicht enthalten ist. Das macht sie zum idealen Werkzeug, wenn man nicht nur wissen möchte, ob ein Wert existiert, sondern auch wo er sich befindet.
Syntax und Grundlagen
Die Funktion erwartet den Suchwert, das zu durchsuchende Array und optional einen Strict-Parameter:
array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false
Bei Erfolg wird der Schlüssel des gefundenen Elements zurückgegeben. Das kann ein Integer (bei numerischen Arrays) oder ein String (bei assoziativen Arrays) sein. Wird der Wert nicht gefunden, gibt die Funktion false zurück.
Vorsicht: Die Key-0-Falle
Der häufigste Fehler bei array_search() ist die Verwechslung von 0 und false. Wenn der gesuchte Wert am Index 0 steht, gibt die Funktion 0 zurück. In einer if-Abfrage wird 0 aber als false interpretiert:
<?php
$sprachen = ["PHP", "Python", "Java"];
$pos = array_search("PHP", $sprachen);
/* FALSCH - 0 wird als false gewertet! */
if ($pos) {
echo "Gefunden";
} else {
echo "Nicht gefunden"; // Das wird ausgegeben!
}
/* RICHTIG - Typsicherer Vergleich */
if ($pos !== false) {
echo "Gefunden an Index: " . $pos; // 0
}
?>
Merke: Das Ergebnis von array_search() immer mit !== false prüfen, nie mit einem einfachen if. Sonst wird ein Treffer am Index 0 fälschlicherweise als „nicht gefunden“ behandelt.
Beispiel: Wert in einem Array finden
Ein einfaches Beispiel mit einem assoziativen Array zeigt, wie array_search() den Schlüssel des gefundenen Wertes zurückgibt:
<?php
$hauptstaedte = [
"Deutschland" => "Berlin",
"Frankreich" => "Paris",
"Spanien" => "Madrid",
"Italien" => "Rom"
];
$land = array_search("Paris", $hauptstaedte);
if ($land !== false) {
echo "Paris ist die Hauptstadt von " . $land;
/* Paris ist die Hauptstadt von Frankreich */
}
?>
Die Funktion durchsucht die Werte des Arrays und gibt den zugehörigen Schlüssel zurück. Bei assoziativen Arrays ist das besonders praktisch, weil man so vom Wert auf den Schlüssel schließen kann.
Der $strict-Parameter: Typstrenger Vergleich
Standardmäßig vergleicht array_search() mit dem losen Vergleichsoperator ==. Das kann bei gemischten Datentypen zu unerwarteten Treffern führen. Mit $strict = true wird stattdessen === verwendet:
<?php
$daten = [true, 1, "1", 1.0, "eins"];
/* Ohne strict: "1" == true ist wahr! */
$ergebnis = array_search("1", $daten);
echo $ergebnis; // 0 (findet true an Index 0)
/* Mit strict: "1" === true ist falsch */
$ergebnis = array_search("1", $daten, true);
echo $ergebnis; // 2 (findet "1" an Index 2)
?>
Ohne strict findet PHP den Wert true an Index 0, weil "1" == true wahr ist. Mit strict = true wird der exakte Typ berücksichtigt und der String "1" korrekt an Index 2 gefunden. Für zuverlässige Ergebnisse empfiehlt es sich, den Strict-Modus zu verwenden, sobald gemischte Datentypen im Spiel sind.
Nur der erste Treffer wird zurückgegeben
array_search() gibt immer nur den Schlüssel des ersten gefundenen Vorkommens zurück. Wenn ein Wert mehrfach im Array vorkommt, werden die weiteren Treffer ignoriert:
<?php
$noten = [2, 1, 3, 1, 2, 1];
$erster = array_search(1, $noten);
echo $erster; // 1 (Index des ersten Vorkommens)
/* Alle Vorkommen finden mit array_keys() */
$alle = array_keys($noten, 1);
print_r($alle);
/* Array ( [0] => 1 [1] => 3 [2] => 5 ) */
?>
Für alle Treffer verwendet man array_keys() mit dem optionalen zweiten Parameter. Diese Funktion gibt ein Array mit allen Schlüsseln zurück, deren Wert dem Suchwert entspricht.
Vergleich: array_search() vs. in_array() vs. array_keys()
PHP bietet mehrere Funktionen, um Werte in Arrays zu finden. Die Wahl hängt davon ab, was genau man wissen möchte:
| Funktion | Rückgabe | Anwendungsfall |
array_search() | Schlüssel des ersten Treffers oder false | Position eines Wertes ermitteln |
in_array() | true oder false | Nur prüfen, ob ein Wert existiert |
array_keys() | Array aller Schlüssel mit dem Suchwert | Alle Vorkommen eines Wertes finden |
Als Faustregel: Wenn man nur wissen will, ob ein Wert vorhanden ist, reicht in_array(). Wenn man den Schlüssel braucht, nimmt man array_search(). Und wenn man alle Vorkommen finden muss, ist array_keys() die richtige Wahl.
Praxisbeispiel: Benutzer-ID nachschlagen
Ein typischer Anwendungsfall ist das Nachschlagen einer ID anhand eines Benutzernamens in einer Liste:
<?php
$benutzer = [
101 => "admin",
102 => "redakteur",
103 => "moderator",
104 => "gast"
];
$gesuchter_name = "moderator";
$id = array_search($gesuchter_name, $benutzer);
if ($id !== false) {
echo "Benutzer gefunden: ID " . $id;
/* Benutzer gefunden: ID 103 */
} else {
echo "Benutzer nicht gefunden";
}
?>
Hier wird der Benutzername in den Werten gesucht und die zugehörige ID (der Schlüssel) zurückgegeben. Das funktioniert in beide Richtungen: Wer die ID hat und den Namen braucht, greift einfach direkt mit $benutzer[$id] auf den Wert zu.
Suche in mehrdimensionalen Arrays
array_search() durchsucht nur die erste Ebene eines Arrays. Für verschachtelte Strukturen muss man die Suche mit einer Schleife selbst implementieren:
<?php
$produkte = [
["id" => 1, "name" => "Laptop", "preis" => 999],
["id" => 2, "name" => "Maus", "preis" => 29],
["id" => 3, "name" => "Tastatur", "preis" => 79]
];
/* Produkt nach Name suchen */
$gesucht = "Maus";
$gefunden = null;
foreach ($produkte as $index => $produkt) {
if ($produkt["name"] === $gesucht) {
$gefunden = $produkt;
break;
}
}
if ($gefunden !== null) {
echo $gefunden["name"] . " kostet " . $gefunden["preis"] . " Euro";
/* Maus kostet 29 Euro */
}
?>
Die foreach-Schleife durchläuft jedes Sub-Array und prüft den gewünschten Schlüssel. Sobald ein Treffer gefunden ist, bricht die Schleife mit break ab. Alternativ kann man array_column() nutzen, um zuerst eine flache Liste der gesuchten Spalte zu erzeugen und dann array_search() darauf anzuwenden.
Verwandte Tutorials
Das Suchen und Finden von Werten in Arrays ist ein zentrales Thema in PHP. Diese Tutorials decken verwandte Bereiche ab:
Häufige Fragen zu array_search()
Hier werden die gängigsten Fragen und Stolperfallen bei der Arbeit mit array_search() beantwortet.
Ist array_search() case-sensitive?
Ja, array_search() unterscheidet Groß- und Kleinschreibung. "php" und "PHP" gelten als verschiedene Werte. Für eine Suche ohne Berücksichtigung der Schreibweise kann man die Werte vorher normalisieren:
<?php
$sprachen = ["PHP", "Python", "JavaScript"];
$suche = "php";
$pos = array_search(
strtolower($suche),
array_map('strtolower', $sprachen)
);
echo $pos; // 0
?>
Was ist der Unterschied zwischen array_search() und array_key_exists()?
array_search() sucht in den Werten und gibt den Schlüssel zurück. array_key_exists() prüft, ob ein bestimmter Schlüssel existiert. Die beiden Funktionen arbeiten in entgegengesetzte Richtungen: array_search() geht vom Wert zum Schlüssel, array_key_exists() prüft direkt den Schlüssel.
Wie findet man den letzten Treffer statt des ersten?
Da array_search() immer den ersten Treffer liefert, kann man das Array vorher mit array_reverse() umdrehen. Dabei muss man true als zweiten Parameter übergeben, damit die Schlüssel erhalten bleiben:
<?php
$daten = ["a", "b", "c", "b", "d"];
$letzter = array_search("b", array_reverse($daten, true));
echo $letzter; // 3
?>
Kann man mit var_dump() das Ergebnis prüfen?
Ja, var_dump() zeigt sowohl den Typ als auch den Wert an. Das ist bei array_search() besonders hilfreich, weil man so den Unterschied zwischen int(0) (Treffer an Index 0) und bool(false) (nicht gefunden) sofort erkennt. Mit echo allein würde man diesen Unterschied nicht sehen.