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

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

von Patrick
13.05.2020
Jetzt PHP programmieren lernen

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.

1. Ü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)

2. Ü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)

3. 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)

4. 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.



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren

Jetzt PHP programmieren lernen
04.05.2020

Zeilenumbrüche in PHP

von