So überprüfst du in PHP ob ein Wert oder Schlüssel bereits in einem Array enthalten ist

    Logo der Programmiersprache PHP
    Avatarbild von Patrick
    Patrick

    veröffentlicht am: 13.05.2020
    zuletzt aktualisiert am: 06.02.2023

    PHP in_array: Prüfen ob der Schlüssel oder Wert bereits vorhanden ist.

    Oft wollen wir überprüfen, ob sich ein spezieller Wert oder Schlüssel in unserem Array befindet. In PHP finden sich dafür einige Funktionen, von denen ich dir hier die PHP in_array, array_search und array_key_exists Funktionen vorstellen möchte.

    Überprüfen mit der PHP in_array Funktion

    Mit der Funktion in_array kannst du überprüfen, ob sich ein Wert in einem Array befindet. Sie akzeptiert 3 Parameter, von denen einer optional ist.

    in_array($needle, $haystack, $strict = FALSE)
        $needle (erforderlich)
            der gesuchte Wert
        $haystack (erforderlich)
            das Array, in dem der Wert gesucht wird
        $strict (optional)
            legt fest, ob der vergleich lose oder strikt erfolgt
            Standardmäßig FALSE

    in_array gibt einen Boolean zurück, der angibt, ob der Wert gefunden wurde.

    $array = [0, 1];
    var_dump(in_array(0, $array));
    // bool(true)
    var_dump(in_array(3, $array));
    // bool(false)

    Allerdings ist zu beachten, dass in_array standardmäßig nur lose Vergleiche durchführt. Das kann zu unerwarteten Ergebnissen führen.

    $array = [1, 2];
    var_dump(in_array('CodeCitrus', $array));
    // bool(false)
    $array = [0, 1];
    var_dump(in_array('CodeCitrus', $array));
    // bool(true)

    Bei dem zweiten Aufruf von in_array erhalten wir true, obwohl der String ‘CodeCitrus’ eindeutig nicht in dem Array vorhanden ist.
    Das liegt an der Art und Weise des Vergleichs:
    Wird ein String in PHP mit einem Integer verglichen, so entspricht der String 0.

    var_dump('CodeCitrus' == 0);
    // bool(true)

    Dies ist nur der Fall beim losen Vergleich.
    Wenn du also Werte möglicherweise verschiedenen Typs miteinander vergleichen möchtest, solltest du einen strikten Vergleich wählen.

    var_dump('CodeCitrus' === 0);
    // bool(false)

    Bei in_array kannst du diesen strikten Vergleich erzwingen, indem du den dritten Parameter auf TRUE setzt.

    $array = [0, 1];
    var_dump(in_array(0, $array, TRUE));
    // bool(true)
    var_dump{"type":"block","srcIndex":9,"srcClientId":"eef2c3af-cd53-4442-adae-6d54cf35f566","srcRootClientId":""}(in_array(3, $array, TRUE));
    // bool(false)
    var_dump(in_array('CodeCitrus', $array, TRUE));
    // bool(false)  

    Du kannst in_array auch auf assoziative Arrays anwenden.

    $ass_arr = ['Code' => 'Citrus', 'foo' => 'bar'];
    var_dump(in_array('Citrus', $ass_arr, TRUE));
    // bool(true)

    Auch ein Array in einem multidimensionalen Array lässt sich so finden:

    $multi_arr = [
        [0, 1],
        ['foo']
    ];
    $arr = ['foo'];
    var_dump(in_array($arr, $multi_arr, TRUE));
    // bool(true)

    Überprüfen mit der PHP array_search Funktion

    array_search akzeptiert die gleichen Parameter wie in_array.
    Als Rückgabewert erhältst du hier allerdings den zu dem gesuchten Wert gehörenden Schlüssel oder false, wenn nichts gefunden wird.

    $array = [0, 1];
    var_dump(array_search(0, $array));
    // int(0)
    var_dump(array_search(3, $array));
    // bool(false)
    var_dump(array_search('CodeCitrus', $array));
    // int(0)

    Du siehst, auch hier ist es meistens ratsam, den Parameter $strict auf TRUE zu setzen.

    $array = [0, 1];
    var_dump(array_search(0, $array, TRUE));
    // int(0)
    var_dump(array_search(3, $array, TRUE));
    // bool(false)
    var_dump(array_search('CodeCitrus', $array, TRUE));
    // bool(false)

    Diese Funktion kann ebenfalls auf assoziative Arrays angewendet werden:

    $ass_arr = ['Code' => 'Citrus', 'foo' => 'bar'];
    var_dump(array_search('Citrus', $ass_arr));
    // string(4) "Code"

    Und auch auf Mehrdimensionale:

    $multi_arr = [
        [0, 1],
        ['foo']
    ];
    $arr = ['foo'];
    var_dump(array_search($arr, $multi_arr));
    // int(1)

    Prüfen, ob ein Schlüssel existiert mit array_key_exists

    Wenn du stattdessen überprüfen willst, ob ein Schlüssel existiert, dann ist die Funktion array_key_exists das richtige für dich.
    Die Funktion hat 2 Parameter: den Schlüssel, der gesucht wird und das zu durchsuchende Array. Der Rückgabewert ist ein Boolean.
    Sie kann sowohl auf einfache als auch assoziative Arrays angewendet werden.

    $arr = ['foo'];
    var_dump(array_key_exists(0, $arr));
    // bool(true)
    $arr = ['Code'=>'Citrus'];
    var_dump(array_key_exists(0, $arr));
    // bool(false)
    var_dump(array_key_exists('Code', $arr));
    // bool(true)

    Mit der Funktion array_flip kannst du die Schlüssel-Wert-Paare umdrehen.
    Das heißt, der Schlüssel wird zum Wert und der Wert zum Schlüssel. So kannst du dann mit array_key_exists nach dem Wert als Schlüssel suchen.
    Praktisch könntest du das so anwenden:

    $arr = ['Code' => 'Citrus', 'foo' => 'bar', 'Antwort' => 42];
    $arr = array_flip($arr);
    var_dump($arr);
    // array(3) { ["Citrus"]=> string(4) "Code" ["bar"]=> string(3) "foo" [42]=> string(7) "Antwort" }
    var_dump(array_key_exists('Citrus', $arr));
    // bool(true)

    Fazit – PHP in_array, array_search & array_key_exists

    Während in_array durchaus eine einfache Möglichkeit bietet, zu überprüfen, ob ein Wert vorhanden ist, musst du genau darauf achten, wie die Werte verglichen werden.
    Dasselbe gilt für die Suche nach Schlüsseln anhand des Wertes mit array_search.
    Mit array_key_exists kannst du zusätzlich überprüfen, ob ein bestimmter Schlüssel in einem Array existiert.

    Wenn du Fragen, Anmerkungen, Lob, Kritik hast, schreib mir bitte einen Kommentar.

    😩 Gelangweilt von den Udemy & YouTube-Tutorials?!

    Lerne spielerisch Python, Java & SQL und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.

    TP Star TP Star TP Star TP Star TP Star

    "Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."

    - Lennart Sparbier

    100% kostenlos registrieren · keine Kreditkarte notwendig

    👋 Wir warten bereits auf dich!

    Lerne das, was du wirklich brauchst.

    Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.

    Logo von Python
    Logo von PyTorch
    Logo von Pandas
    Logo von Matplotlib
    Logo von Java
    Logo von NumPy
    Mehr erfahren

    100% kostenlos registrieren · keine Zahlungsdaten notwendig