Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

Array durchsuchen mit array_search()

Sie befinden sich: Home > Php Tutorial > Array durchsuchen

Array durchsuchen


Eintrag am:  25.01.2023
Hits / Besucher:  2770
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

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:

FunktionRückgabeAnwendungsfall
array_search()Schlüssel des ersten Treffers oder falsePosition eines Wertes ermitteln
in_array()true oder falseNur prüfen, ob ein Wert existiert
array_keys()Array aller Schlüssel mit dem SuchwertAlle 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.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.